如何在更新面板回发后执行javascript回调?

tsb*_*nes 70 javascript updatepanel asp.net-ajax callback

当用户悬停页面的某些元素时,我正在使用jQuery tip插件来显示帮助提示.

我需要在使用css选择器加载页面后注册插件事件.

问题是我使用的是ASP.NET更新面板,在第一次回发后,提示会停止工作,因为更新面板会替换页面内容,但不会重新绑定javascript事件.

在更新面板刷新其内容后,我需要一种方法来执行javascript回调,因此我可以重新绑定javascript事件以使提示再次起作用.

有没有办法做到这一点?

Rus*_*Cam 163

而不是把你的jQuery代码放在里面$(document).ready(),把它放在里面

function pageLoad(sender, args) { 
    ... 
}
Run Code Online (Sandbox Code Playgroud)

pageLoad在每次回发,同步或异步后执行.pageLoad是ASP.NET AJAX中的保留函数名称,用于此目的.$(document).ready()另一方面,当DOM最初准备好/加载时,仅执行一次.

请参阅ASP.NET AJAX客户端生命周期事件概述

  • 感谢您的回答.我不知道有一个客户端的pageLoad事件,这正是我需要的.问题解决了.:) (4认同)

rba*_*all 19

pageLoad不起作用.我改用了这个:

var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(pageLoaded);

function pageLoaded() {
}
Run Code Online (Sandbox Code Playgroud)

  • 未被引用的引用错误,未定义Sys. (2认同)
  • 如果您未定义Sys id,那是因为您正在调用脚本,那么在加载脚本管理器脚本之前.通常在<head>中,而scriptmanger的东西都加载在<body>中 - 是的,我知道,对吧?!只需将您的脚本移动到页面底部或您的控件,它将适用于接受的答案. (2认同)

And*_*ock 12

这可能远非最优雅的解决方案,但它仍然是一个解决方案:

public class UpdatePanel : System.Web.UI.UpdatePanel
{
    /// <summary>
    /// Javascript to be run when the updatepanel has completed updating
    /// </summary>
    [Description("Javascript to be run when the updatepanel has completed updating"),
        Category("Values"),
        DefaultValue(null),
        Browsable(true)]
    public string OnUpdateCompleteClientScript
    {
        get
        {
            return (string)ViewState["OnUpdateCompleteClientScript"];
        }
        set
        {
            ViewState["OnUpdateCompleteClientScript"] = value;
        }
    }

    protected override void OnPreRender(System.EventArgs e)
    {
        base.OnPreRender(e);
        if(!string.IsNullOrEmpty(this.OnUpdateCompleteClientScript))
            Page.ClientScript.RegisterStartupScript(this.GetType(), this.ClientID, string.Concat("Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, args){for(var panelId in sender._updatePanelClientIDs){if(sender._updatePanelClientIDs[panelId] == '", this.ClientID, "'){", this.OnUpdateCompleteClientScript, "}}});"), true);
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

<uc:UpdatePanel OnUpdateCompleteClientScript="alert('update complete');">
    <!-- stuff in here -->
</uc:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)

当然,您需要在webconfig或page中注册自定义控件才能像这样使用它.

编辑:还有,你看过jquery.live吗?