最近我读了John Resig的书《Javascript Ninja的秘密》,在关于元素事件,他写道:
出于多种原因,不绑定事件是有利的处理程序直接指向元素。
因此,在他的下一个代码中,他定义了自定义的addEvent
、detachevent
、dispatcher
、triggerevent
方法,并将事件处理程序存储到缓存队列中,等等
尽管存在浏览器兼容性问题,但是否有其他原因不将事件处理程序直接绑定到元素?
使用此模型的一个原因是在处理动态元素时。
若您想在创建每个元素后将处理程序附加到元素本身,您需要将处理程序添加到它,但我更喜欢使用事件委派,并将处理程序注册到一个始终存在的元素,然后过滤目标元素。
原因在同一节的后面部分给出。我只是复制它以供参考:
■Event实例已修复。
■函数上下文设置为目标元素。
■Event实例作为其唯一参数传递给处理程序。
■事件处理程序将始终按照它们被绑定的顺序执行。
此外,您还可以更清洁地控制搬运器的移除。
如果您保留对每个事件侦听器及其信息的引用,那么跟踪它们会容易得多。它给你一些额外的控制;现在由您选择何时需要使用它。