当我执行部分页面回发时,如何重新绑定我的事件(jquery)?
我使用以下方式连接所有内容:
$(document).ready(function(){};
在部分页面回发后,我的事件没有被触发。
答案 0 :(得分:10)
您可以点按PageRequestManager endRequestEvent:
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){});
或者,如果它是您尝试附加的控件事件,则可以使用jQuery live events。
另一种选择是手动执行事件委派。这是“现场”活动在幕后做的事情。将事件处理程序附加到文档本身,如果事件的发送者是您期望的元素,则有条件地执行您的方法。
$(document).click(function(e){
if($(e.target).is(".collapseButton")){
$(this).find(".collapsePanel").slideToggle(500);
}
})
答案 1 :(得分:6)
我猜测你在Asp.net的土地上工作'部分网页回复'。
尝试使用
Sys.Application.add_load(function() { });
你仍然可以使用该func中的所有普通jQuery内容。
答案 2 :(得分:2)
查看jQuery 1.3 here的“实时”功能。您可以将事件添加到将来的元素以及页面上的当前元素。这可能会简化您需要编写的代码。
答案 3 :(得分:0)
当你进行部分回发时会替换一些DOM元素,当然,新元素会松散jQuery绑定。您可以使用ScriptManager类来注册将在部分回发完成后执行的脚本(看看here)
答案 4 :(得分:0)
最优雅的解决方案(使用jQuery 2.x)是这样的:
使用" on"事件。确保将事件绑定到文档而不绑定到元素本身!
代码示例:
$(document).on('click', 'div.messages', function () {
console.log('click on div.messages');
return false;
});
将此代码放入document.ready中。
即使在UpdatePanel中更改或创建了div.messages,这仍然有效。它永远不会被激发两次或更多次。