【Javascript】 onclick与addEventListener绑定事件的区别

256 阅读2分钟

 综合参考以下两篇博客:

JS中onclick与addEventListener绑定事件的区别

onclick与addEventListener区别

区别:

1.onclick事件在同一时间只能指向唯一对象

2.addEventListener给一个事件注册多个listener

3.addEventListener对任何DOM都是有效的,而onclick仅限于HTML

4.addEventListener可以控制listener的触发阶段,(捕获/冒泡)。对于多个相同的事件处理器,不会重复触发,不需要手动使用removeEventListener清除

5.IE9使用attachEvent和detachEvent
6.onclick解绑:

window.onresize = function(event){
    event.preventDefault();
    console.log('调整浏览器窗口大小时触发resize事件');
}
window.onresize = none;

7.addEventListener解绑:

function resizeWindow(event){
  event.preventDefault();
  console.log('调整浏览器窗口大小时触发resize事件')
}
window.addEventListener('resize', resizeWindow, false);
window.removeEventListener('resize', resizeWindow, false);

8.onclick()方式

window.onload = function() {
                var container = document.querySelector("#container");
                container.onclick = function() {
                    console.log("第一次onclick事件");
                }
                container.onclick = function() {
                    console.log("第二次onclick事件");
                }
            }     
            //运行结果:“第二次onclick事件”

运行结果是第二个onclick把第一个onclick给覆盖了,虽然大部分情况用on就可以完成想要的结果,但是有时又需要执行多个相同的事件,很明显如果用on不能完成

9.addEventListener()方法

window.onload = function() {
                var container = document.querySelector("#container");
                container.addEventListener("click", function() {
                    console.log("第一个addEventListener事件");
                })
                container.addEventListener("click", function() {
                    console.log("第二个addEventListener事件");
                })
            }
            //运行结果:
            //"第一个addEventListener事件"
            //"第二个addEventListener事件"

addEventListenert方法第一个参数填写事件名,第二个参数是一个函数,第三个参数是指在冒泡阶段还是捕获阶段处理事件处理程序。true代表捕获阶段处理, false代表冒泡阶段处理。第三个参数可以省略,大多数情况也不需要用到第三个参数,不写第三个参数默认false

总结:

1.于是得出结果,onclick只出现一次,但是addEventListener却可以先后运行不会被覆盖,addEventListener允许给一个事件注册多个监听器。在使用DHTML库或者 Mozilla extensions 这样需要保证能够和其他的库或者差距并存的时候非常有用。

2.事件冒泡执行过程:从最具体的的元素开始向上开始冒泡

3.事件捕获执行过程:从最不具体的元素(最外面的那个盒子)开始向里面冒泡