0

我在 StackOverflow 上看到了其他一些解决方案,但我特别好奇为什么这突然不起作用。一点背景... 我们仍在使用 jQuery 1.7.1,并且我们正在尝试修补插件和页面,这些插件和页面不适用于较新版本的 jQuery。目前,我正在使用 1.8.3 进行测试。这是问题:

我在 UpdatePanel 中有一个网格,在 TemplateField 中有按钮。每个按钮都有一个分配给它的类,当点击...时会弹出一个模式。这在我将 .live 事件放入 document.ready 的 1.7.1 下完美运行。升级到 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');
            });
});

按钮位于 UpdatePanel 中网格中的 TemplateField 内:

<asp:Button ID="btnEdit" runat="server" Text="Edit" CommandName="EditApp" CssClass="AppEdit" />

任何想法为什么会这样?我不想使用 pageLoad,那么我最好的选择是什么?

4

1 回答 1

2

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

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

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

于 2013-03-08T16:09:57.893 回答