8

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

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

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

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

4

5 回答 5

10

您可以点击PageRequestManager endRequestEvent:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){});

或者,如果它是您尝试附加的控制事件,您可以使用 jQuery实时事件

另一种选择是手动进行事件委托。这就是“现场”活动在幕后所做的事情。将事件处理程序附加到文档本身,然后如果事件的发送者是您期望的元素,则有条件地执行您的方法。

$(document).click(function(e){  
    if($(e.target).is(".collapseButton")){  
        $(this).find(".collapsePanel").slideToggle(500);  
    }  
})  
于 2009-04-17T15:29:31.663 回答
6

我从'部分页面回发'猜测你在 Asp.net 土地上工作。

尝试使用

Sys.Application.add_load(function() { });

您应该仍然可以在该 func 中使用所有正常的 jQuery 内容。

于 2009-04-17T15:27:31.963 回答
2

在此处查看jQuery 1.3 的“实时”功能。您可以将事件添加到未来元素以及页面上的当前元素。这可能会简化您需要编写的代码。

于 2009-04-17T15:30:07.247 回答
1

最优雅的解决方案(使用 jQuery 2.x)是这样的:

使用“on”事件。确保将事件绑定到文档而不是元素本身!

代码示例:

$(document).on('click', 'div.messages', function () {
    console.log('click on div.messages');
    return false;
});

例如,将此代码放入 document.ready 中。

即使在 UpdatePanel 中更改或创建了 div.messages,这仍然有效。而且它永远不会一次发射两次或更多次。

于 2015-01-23T17:43:15.350 回答
0

当您执行部分回发时,一些 DOM 元素会被替换,当然,新元素会丢失 jQuery 绑定。您可以使用 ScriptManager 类来注册将在部分回发完成后执行的脚本(看看这里

于 2009-04-17T15:27:53.163 回答