调用jquery .on(document.body)而不是特定元素是否有缺点

时间:2014-02-26 16:52:42

标签: javascript jquery

我正在将项目中使用的jQuery版本升级到最新版本。 .live函数在很多地方被用来改变动态创建的显示并且工作得很好,但.live功能在jQuery的更高版本中被删除,因此需要重新组装。

作为标准化编码的一种方式,我正在考虑将函数称为:

$(document.body).on('click', '#clickableElement', function(){})

而不是

$("#clickableElement').on('click', function(){})

即使不对动态创建的对象执行click方法也是如此。

你觉得这个想法有什么不足吗?考虑到它是一个内部网站,用户数量很少,并且所有元素都提供了id。

2 个答案:

答案 0 :(得分:2)

事件委派是一种推荐的模式,因为它有助于避免在事件处理程序附加到稍后从DOM中删除的DOM元素时可能发生的内存泄漏。

在大多数情况下,选择器强制JS通过DOM树,识别所有匹配,并将事件处理函数的新实例附加到每个匹配元素,它也更快。

虽然在非常具体的ID示例中都不是这种情况,但将其用作一般方法没有任何缺点。在文档的根本上授权的唯一真正的缺点是在事件到达正文之前取消事件的风险,这会阻止它冒泡到你的处理程序。

答案 1 :(得分:0)

事件委托并不总能让您的代码更快。在某些情况下,它是有利的,在某些情况下不是。

您应该在实际需要事件委派时以及从中受益时使用事件委派。否则,您应该将事件处理程序直接绑定到事件发生的对象,因为这通常会更有效。

此外,您不应在文档级别绑定所有委派事件。这正是为什么.live()被弃用的原因,因为当你以这种方式绑定大量事件时,效率非常低。对于委托事件处理,将它们绑定到非动态的最近父节点会更有效。