最近我读到John Resig
的书Secrets of Javascript Ninja
,约 元素事件一章中,他写道:Javascript:是否真的需要自己管理事件处理程序?
对于一些原因,这是有利的不是事件 处理程序直接绑定到的元素。
所以在他的下一个代码,他定义自定义addEvent
detachevent
dispatcher
triggerevent
方法,和存储事件处理程序到缓存队列等。
尽管浏览器兼容性问题,是否有任何其他原因不直接绑定到元素的事件处理程序?
最近我读到John Resig
的书Secrets of Javascript Ninja
,约 元素事件一章中,他写道:Javascript:是否真的需要自己管理事件处理程序?
对于一些原因,这是有利的不是事件 处理程序直接绑定到的元素。
所以在他的下一个代码,他定义自定义addEvent
detachevent
dispatcher
triggerevent
方法,和存储事件处理程序到缓存队列等。
尽管浏览器兼容性问题,是否有任何其他原因不直接绑定到元素的事件处理程序?
使用此模型的一个原因是当您处理动态元素时。
如果你想在创建每个元素后附加处理程序到元素本身,你需要附加处理程序,但我更喜欢使用事件委托并注册处理程序到一个元素,这将是总是在那里,然后过滤目标元素。
原因在后面的章节中给出。我只是复制它以供参考:
■事件实例已修复。
■函数上下文被设置为目标元素。
■Event实例作为唯一参数传递给处理程序。
■事件处理程序将始终按其绑定顺序执行。
除此之外,您还可以更清晰地控制处理程序的移除。
如果您保留对每个人及其信息的引用,那么跟踪您的事件侦听器就容易多了。它给你一些额外的控制;现在取决于您何时需要使用它。
我可能更喜欢的一种情况是,如果我想将处理程序添加到页面中的很多元素(如列表页面中的编辑按钮处理程序或50个项目) –
是否将侦听器添加到元素或将“委派”元素与(未指定的)浏览器可比性问题无关。它与应用程序设计有关,例如将单个监听器添加到处理表上所有单击事件的表中而不是将侦听器添加到每个需要单个事件的单元格可能是有利的(更简单的逻辑,更容易维护等)。 – RobG