【区别1】addEventListener在同一元素上的同一事件类型添加多个事件,不会被覆盖,而onEventType会覆盖。
let btn = document.querySelector('.btn');
btn.onclick = function(){
console.log("hello javascript");
};
btn.onclick = function(){
console.log("hello, world");
};
//结果输出: hello, world
onclick后面用的是赋值号,所以后执行的函数会覆盖前面的函数,结果只输出”hello world“。
addEventListener则实现类似“追加”功能。
btn.addEventListener("click", function(){
console.log("hello javascript");
});
btn.addEventListener("click", function(){
console.log("hello, world");
});
结果为
hello javascript
hello, world
好奇试了一下,jQuery用.click和.on方法使用的效果都是一样的,两段文字都会输出
let btn = $('.btn');
btn.click(function(){
console.log("hello javascript");
})
btn.click(function(){
console.log("hello, world");
})
// 输出:hello javascript
// hello, world
btn.on("click", function(){
console.log("hello javascript");
});
btn.on("click", function(){
console.log("hello, world");
});
// 输出:hello javascript
// hello, world
【区别2】addEventListener可以设置元素在捕获阶段触发事件,而onEventType不能
创建三个div层层嵌套
<div class="big" style="height: 300px; width: 300px;background-color: yellow;">
<div class="mid" style="height: 200px; width: 200px; background-color: red;">
<div class="small" style="height: 100px; width: 100px; background-color: blue;">
</div>
</div>
</div>
设置三个div点击时输出文本
<script type="text/javascript">
let big = document.querySelector('.big');
let mid = document.querySelector('.mid');
let small = document.querySelector('.small');
big.addEventListener("click", function(){console.log("big")});
mid.addEventListener("click", function(){console.log("mid")});
small.addEventListener("click", function(){console.log("small")});
</script>
默认情况下,点击最底层div(蓝色),三个div的执行顺序是从底层向高层依次执行(事件冒泡)。
控制台输出结果:
而addEventListener可以有第三个参数,默认情况下为false,会使得事件以“事件冒泡”顺序执行。
若改为true,则可使之以相反顺序执行(事件捕获)。
big.addEventListener("click", function(){console.log("big")}, true);
mid.addEventListener("click", function(){console.log("mid")}, true);
small.addEventListener("click", function(){console.log("small")}, true);
点击最底层(蓝色),控制台输出: