jquery需要在部分页面回发上重新绑定事件

时间:2009-04-17 15:15:18

标签: javascript jquery binding postback

当我执行部分页面回发时,如何重新绑定我的事件(jquery)?

我使用以下方式连接所有内容:

$(document).ready(function(){};

在部分页面回发后,我的事件没有被触发。

5 个答案:

答案 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,这仍然有效。它永远不会被激发两次或更多次。