到目前为止,我已经找到了四种变体。
addEventListener('click')
是本机方法,表现最佳。
然后jQuery将它包装为与一些过时的浏览器兼容,同时通过三种不同的方法将性能降低一个数量级:
on('click')
click()
onclick()
为什么会有这么多?他们存在的历史/推理是什么?简而言之,它们的用例或限制是否存在差异?
答案 0 :(得分:3)
到目前为止,我已经找到了四种变体。
嗯,不。其中两个是DOM,而不是jQuery。 jQuery实例上没有addEventListener
或onclick
。他们是DOM元素。
那么为什么jQuery同时拥有on
和click
?也许the documentation可以告诉我们:
click
此方法是
的快捷方式.on( "click", handler )
它只是一个快捷方式,七个字符而不是11个(原来13个,见下文),因为在编码时知道事件名称(而不是运行时,我们可能将变量传递给on
)。 (还有另一种形式的click
:如果你不带参数调用它,它会触发事件而不是挂钩处理程序。)
您忘记了bind
,这是on
的早期版本。在v1.7中添加了on
以合并bind
,delegate
和live
的功能。改造bind
需要进行重大更改,bind
这个词越来越意味着something else entirely。因此,他们使用on
,因为DOM使用“on”前缀(onclick
,onmousemove
,onfocus
,...),这两者都可以在DOM元素属性中使用将函数分配给,以及作为属性,您可以将代码放入标记中。
jQuery也有one
,类似于on
但在第一次使用时会自动删除处理程序。
结论:所有API都会逐渐发展。