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最初准备好/加载时,仅执行一次.
rba*_*all 19
pageLoad不起作用.我改用了这个:
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(pageLoaded);
function pageLoaded() {
}
Run Code Online (Sandbox Code Playgroud)
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吗?
| 归档时间: |
|
| 查看次数: |
66396 次 |
| 最近记录: |