绑定事件的覆盖
2021-07-10 本文已影响0人
Marshall3572
使用onclick给按钮连续绑定了两次事件,会调用两次么?如果换成addEventListener呢?
如果将一个函数对象赋值给一个onClick属性,那么这个onClick就会指向这个函数,后面再给这个onClick属性赋值的时候,onClick就指向了后边那个函数,前边的函数会被垃圾回收掉
在通常情况下,如果要为单个事件注册多个事件处理程序,那么只有最后注册的那个事件处理程序才会起作用。这是因为在DOM中,为HTML元素的一个事件指定事件处理程序时,这个事件处理程序会成为该元素的一个属性,如果为一个属性赋值,这个属性就会有这个值,可是如果再继续为这个属性赋值呢?很简单,这个属性就会有新值,原来的值就被覆盖了。所以,只有最后注册的那个事件处理程序才会起作用。为了解决这个问题,我们可以使用DOM Level 2模型的addEventListener()方法。
addEventListener("事件名(不用加on)",事件处理程序,Bool(指示是完成事件冒泡(false)还是事件捕获(true),通常情况下使用false))。
这个事件是DOM Level 2模型的新方法,所以支持该模型的浏览器都可以使用这个方法,但是,在ie浏览器中,并不支持addEventListener方法,不过不用担心,我们可以使用attachEvent("事件名(加on)",事件处理程序),作用是一样的。
使用了事件监听之后,我们并不能确定事件处理程序的调用顺序与其增加顺序一致,因为事件监听者并不会以某种特定的顺序调用事件处理程序,我们要确保事件处理程序不依赖于所调用的顺序。