我已经在StackOverflow上看到了其他一些解决方案,但我特别好奇为什么这不会突然发生。一点背景......我们仍在使用jQuery 1.7.1,我们正在尝试修补不适用于较新版本jQuery的插件和页面。目前,我正在测试1.8.3。这是问题所在:
我在UpdatePanel中有一个网格,其中包含TemplateField中的按钮。每个按钮都有一个分配给它的类,当点击时...弹出一个模态。这完全在1.7.1下工作,我把.live事件放在document.ready中。升级到1.8.3,我摆脱了live()并使用on(),所有这些都在document.ready中。
每当我在网格上页面时,异步回发都会触发,而.on()会丢失。我做的唯一改变是升级到1.8.3。并将live()更改为on()。这之前有用。为什么突然间我不能这样做。示例代码如下:
$(document).ready(function () {
$("#AppDialog").dialog({
bgiframe: true,
autoOpen: false,
height: 400,
width: 650,
modal: true,
resizable: false }
});
$(".AppEdit").on("click", function (e) {
e.preventDefault();
$("#AppDialog").dialog('open');
});
});
Button位于UpdatePanel中的网格中的TemplateField中:
<asp:Button ID="btnEdit" runat="server" Text="Edit" CommandName="EditApp" CssClass="AppEdit" />
任何想法为什么会这样?我不想使用pageLoad,那么这里最好的选择是什么?
答案 0 :(得分:2)
.live()和.on()之间的区别在于.live()将应用于所有元素(包括将来使用ajax添加的元素),而.on()仅适用于当前在DOM中的元素
$(document).on('click', '.AppEdit', function() {});
这样做是为文档对象设置事件处理程序,每当事件冒泡并被捕获时,它将检查eventObject.target是否具有AppEdit类,如果是,则执行您的函数。