事件监听器是否与html事件相同?

时间:2012-01-07 13:35:39

标签: javascript jquery html dom

HTML中的onclick是否与jQuery中的.click()相同?

显然,从可用性的角度看它们是相同的,但我很好奇浏览器如何处理它们。

4 个答案:

答案 0 :(得分:4)

jQuery在幕后使用JavaScript附加事件。

一个重要的区别是jQuery允许使用click()绑定多个事件,因为您只能使用onclick附加一个处理程序。这是因为jQuery uses幕后是addEventListenerattachEvent,而不是直接绑定到.onclick

此外,通过JavaScript(使用jQuery或不使用jQuery)附加处理程序可以促进unobtrusive JavaScript(即不混合JavaScript和HTML),这是一件好事。

答案 1 :(得分:3)

不,不一样。 OnClick设置DOM元素的属性,其中.click()添加eventListener。

它们之间的区别在于每个DOM元素一次只能具有一个类型的属性。因此,如果您对元素使用onClick=两次,则只有最后添加的内容才会获胜,第一个将被覆盖。

这将始终提示2,因为第一个附件将被覆盖:

myDiv.onclick = function(){alert('1')} 
myDiv.onclick = function(){alert('2')}

使用.click().addEventListener('click', myFunction),您可以根据需要添加任意数量的功能。因此,以下内容将提示1和2:

myDiv.click(function(){alert('1')}) 
myDiv.click(function(){alert('2')})

jquerys .click().addEventListener()之间的区别在于,jquery解决方案适用于所有浏览器,因为IE< = 8具有不同的语法(attchEvent)。并且您可以unbind一次点击处理程序。 normal JavaScript solution只能分离传递的函数而不是所有函数。

答案 2 :(得分:2)

(注意jQuery是一个JavaScript库,所以如果你有时间的话,你不能做任何你自己无法做的事情......)

jQuery .click()方法在几个关键方面与onclick不同。没有特别的顺序:

  • jQuery努力规范化event对象,以便您不必担心浏览器之间的(主要)微小差异
  • jQuery将事件与.addEventListener().attachEvent()绑定,具体取决于您的浏览器支持的内容,因此,您不必担心差异
  • jQuery保证多个处理程序绑定到同一个元素和事件的位置,它们将按照它们附加的顺序运行(注意使用.onclick你只能绑定一个处理程序,但是{{1} }}和.addEventListener()你可以绑定多个处理程序)
  • 如果您使用jQuery的.attachEvent().on()(或已弃用的.delegate())来附加事件,而不是像.live()那样的快捷方法,则很容易设置事件委派

在幕后,所有标准的浏览器事件仍在发生,但jQuery为它们提供了一个包装器,可以完成上述所有操作。当然还有其他一些差异,但我认为上面是最重要的。

  

从可用性的角度来看,它们显然是相同的

不,他们不是。在你如何使用它们时,jQuery的事件(几乎)与.click().addEventListener()相同会更准确,但即便如此,如上所述,jQuery为你提供了额外的抽象级别。除了你自己编写代码之外,还可以保存。

答案 3 :(得分:0)

即使在JQuery中.click()也不一样。它是html中onclick之上的一段代码。 JQuery允许在普通的html事件之上使用该层将方法绑定到事件。

您可以更改/覆盖.click()以适应您的需求。例如,当使用移动浏览器或pda等时