综合参考以下两篇博客:
区别:
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.事件捕获执行过程:从最不具体的元素(最外面的那个盒子)开始向里面冒泡