0

我有一个小 ajax 应用程序的问题,其中很多元素是动态添加/删除的。我发现我的 ajax 调用被执行了多次,因为我认为使用 On() 会替换当前事件,而不是仅仅将它添加到函数中。

所以我每次需要一个事件时都开始使用 off() 。这太糟糕了。我刚刚发现了 stopImmediatePropagation() ,它似乎具有相同的效果,但性能和可读性更好。

我看了很多教程,但是有很多旧的/删除的东西。

我正在寻找一种在 jQuery 中使用事件的最佳实践的方法。谢谢

4

2 回答 2

2

在这种情况下,您想使用事件委托。通常,当您在 jQuery 中绑定事件时,您会将其绑定到特定元素,但如果您知道将在运行时添加元素(通过 ajax 等),则可以使用事件委托;事件委托在事件触发时运行选择器,而不是在绑定时运行。

当您绑定事件时,只需设置选择器,例如,

$(window).on('click', 'button.fun', function() {
    alert('how fun');
});

在上面的代码中,任何时候你点击 button.fun 都会弹出一个警告,上面写着多么有趣。这些按钮可以自由添加/删除。window请注意,除非需要,否则不应直接绑定到;容器越具体越好。

stopImmediatePropagation只是说停止调度事件,但是,所有事件仍然是绑定的,所以它浪费内存等。

于 2013-09-30T15:43:16.870 回答
0

最佳实践是为所有适用的标签定义您的事件,而其他任何地方都没有。为此,您应该使用尽可能具体的选择器,它仍然定义了事件应该处于活动状态的所有标签。如果更多标签应该共享相同的事件或相同的样式,那么它们可以有共同的 CSS 类。

于 2013-09-30T21:10:47.753 回答