升级的jQuery,.on()和document.ready不能与UpdatePanels一起使用

时间:2013-03-08 16:07:44

标签: javascript jquery asp.net .net

我已经在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,那么这里最好的选择是什么?

1 个答案:

答案 0 :(得分:2)

.live()和.on()之间的区别在于.live()将应用于所有元素(包括将来使用ajax添加的元素),而.on()仅适用于当前在DOM中的元素

$(document).on('click', '.AppEdit', function() {});

这样做是为文档对象设置事件处理程序,每当事件冒泡并被捕获时,它将检查eventObject.target是否具有AppEdit类,如果是,则执行您的函数。