为什么jQuery中存在许多click事件监听器的变体?

时间:2016-02-22 06:46:43

标签: javascript jquery javascript-events onclicklistener event-listener

到目前为止,我已经找到了四种变体。

addEventListener('click')是本机方法,表现最佳。

然后jQuery将它包装为与一些过时的浏览器兼容,同时通过三种不同的方法将性能降低一个数量级:

on('click')

click()

onclick()

为什么会有这么多?他们存在的历史/推理是什么?简而言之,它们的用例或限制是否存在差异?

1 个答案:

答案 0 :(得分:3)

  

到目前为止,我已经找到了四种变体。

嗯,不。其中两个是DOM,而不是jQuery。 jQuery实例上没有addEventListeneronclick。他们是DOM元素。

那么为什么jQuery同时拥有onclick?也许the documentation可以告诉我们:

  

click

     

此方法是.on( "click", handler )

的快捷方式

它只是一个快捷方式,七个字符而不是11个(原来13个,见下文),因为在编码时知道事件名称(而不是运行时,我们可能将变量传递给on)。 (还有另一种形式的click:如果你不带参数调用它,它会触发事件而不是挂钩处理程序。)

您忘记了bind,这是on的早期版本。在v1.7中添加了on以合并binddelegatelive的功能。改造bind需要进行重大更改,bind这个词越来越意味着something else entirely。因此,他们使用on,因为DOM使用“on”前缀(onclickonmousemoveonfocus,...),这两者都可以在DOM元素属性中使用将函数分配给,以及作为属性,您可以将代码放入标记中。

jQuery也有one,类似于on但在第一次使用时会自动删除处理程序。

结论:所有API都会逐渐发展。