Javascript:真的有必要自己管理事件处理程序吗?

Javascript:真的有必要自己管理事件处理程序吗?,javascript,javascript-events,event-handling,Javascript,Javascript Events,Event Handling,最近我读了John Resig的书《Javascript忍者的秘密》,在关于 元素事件,他写道: 出于许多原因,不绑定事件是有利的 处理程序直接指向元素 因此,在他的下一个代码中,他定义了定制的addEventdetachevent

最近我读了John Resig的书《Javascript忍者的秘密》,在关于 元素事件,他写道:

出于许多原因,不绑定事件是有利的 处理程序直接指向元素

因此,在他的下一个代码中,他定义了定制的
addEvent
detachevent
triggerevent
方法,并将事件处理程序存储到缓存队列中,以此类推


尽管存在浏览器兼容性问题,但还有其他原因不将事件处理程序直接绑定到元素吗?

使用此模型的一个原因是在处理动态元素时


如果要在创建每个元素后将处理程序附加到元素本身,则需要将处理程序附加到元素本身,但我更喜欢使用事件委派,将处理程序注册到始终存在的元素,然后过滤目标元素。

原因在同一部分的后面部分中给出。我只是复制它作为参考:

■ 事件实例已修复

■ 函数上下文被设置为目标元素

■ 事件实例作为其唯一参数传递给处理程序

■ 事件处理程序将始终按照绑定顺序执行


此外,您还可以对处理程序的删除进行更清晰的控制。

如果您保留对每个事件侦听器及其信息的引用,则可以更轻松地跟踪事件侦听器。它给你一些额外的控制;现在,您可以选择何时使用它。

我更喜欢的一种情况是,如果我想将处理程序添加到页面中的许多元素中,如列表页面中的编辑按钮处理程序或50个项目,那么是否将侦听器添加到元素或将“委托”到父元素与(未指定的)浏览器可比性问题无关。它与应用程序设计有关,例如,将单个侦听器添加到处理表上所有单击事件的表中可能比将侦听器添加到每个需要侦听器的单元格中更有利(逻辑更简单,维护更容易等等)。