语法:
element.addEventListener('type',function()[,useCapture])
将指定的监听器注册到element(目标对象)上,当对该对象触发指定的事件时,就会执行事件处理函数
type:事件类型字符串 如:click mouseover(鼠标经过) 等 注意这里不要加on!
useCapture:可写可不写参数 是一个布尔值 默认是false
特点:同一个元素 同一个事件可以注册多个监听器 但是使用传统的element.onclick = function(){} 一个事件只能注册一个点击函数
案例:此时点击btn 会相继弹出两个对话框 但是使用传统方式onclick 只会显示第二个‘你好2’ 因为会把第一个覆盖掉
<body>
<button>提交</button>
</body>
<script>
var btn = document.querySelector('button');
btn.addEventListener('click', function() {
alert('你好');
})
btn.addEventListener('click', function() {
alert('你好2');
})
</script>
上面只讲了括号里的两个参数 下面就来讲第三个参数useCapture的使用方法 默认fasle
element.addEventListener('type',function()[,useCapture])
第三个参数如果是true 表示在事件捕获阶段 如果是false 表示事件在冒泡阶段
注:实际开发中很少使用事件捕获 更关注的事件冒泡
冒泡和捕获只能写其中一个 useCapture要么默认false 要么true
有些事件是没有冒泡的 如oblur onfous onmouseenter onmouseleave
案例:
<body>
<div class="father">
father
<div class="son">son</div>
</div>
<script>
//冒泡阶段 点击son盒子 先弹出son 后弹father
//son ->father->body->html->document
var father = document.querySelector('.father');
var son = document.querySelector('.son');
father.addEventListener('click', function() {
alert('father')
}, false)
son.addEventListener('click', function() {
alert('son')
}, false)
//捕获阶段 点击son盒子 先弹出father 后弹son
//document->html->body->father->son
// var father = document.querySelector('.father');
// var son = document.querySelector('.son');
// father.addEventListener('click', function() {
// alert('father')
// }, true)
// son.addEventListener('click', function() {
// alert('son')
// }, true)
</script>
</body>
相关知识点 和这个一起常用的:js中删除事件removeEventListener的使用