0

我在我的代码中使用了一些事件,例如:

$( "body" ).on( "click", '.editButton', clickFunction);

它为 Body 中每个具有 .editButton 类的元素创建事件。我将此事件添加到 Body 元素,因为我不知道在代码中哪里可以有这个按钮,有时我对站点的不同部分执行许多 ajax 请求,我希望它们都触发 clickFunction。这种方法对一般页面速度有什么影响?如果我有 5-6 个这样的委托事件怎么办。我不确定它是如何工作的。如果我通过 Ajax 调用向页面添加一些新的 html 元素,脚本是否会在每个 Body 元素中搜索 .editButton 元素并为其创建点击事件?当我很少有这样的事件时,它会像那样做几次吗?它有多快?这是我们必须关心的事情吗?

4

1 回答 1

2

如果我通过 Ajax 调用向页面添加一些新的 html 元素,脚本是否会在每个 Body 元素中搜索 .editButton 元素并为其创建点击事件?

好吧,这并不是 JavaScript 中事件委托的工作方式。您只将事件处理程序附加到父节点一次。在你的情况下,body标签。

现在,当任何地方、任何节点上的任何事件发生时,该事件都会向上传播 DOM 树。(事件冒泡)。一旦它遇到事件处理程序,就会检查处理程序的目标并使用它执行回调函数。

在您的情况下,每当单击编辑按钮(或单击任何按钮)时,事件都会向上传播到您拥有click处理程序的身体。它看到目标是.editButton并且 JS 知道这是您的处理程序的目标。

如您所见,性能下降的唯一方法是当您的 dom 树太深时。这就是为什么将事件处理程序添加到公共父级并始终添加到body某些使用的或文档中的一个好习惯的原因。

所以添加更多这样的按钮不会导致性能问题的增加。

于 2013-10-27T11:25:40.660 回答