事件对象
event就是一个事件对象 写到我们的监听函数的括号里面 当形参来看
事件对象只有有了事件才存在,他是系统给我们自动创建的 不需要我们传递参数
事件对象是我们事件的一系列相关数据的集合 跟事件相关比如鼠标点击就包含了鼠标的相关信息等等
事件对象我们可以自己定义比如event,eve,e
事件对象也有兼容性问题 I E6,7,8通过window.event,兼容性的写法e = e || window.wvwnt
1 <div class="div">123</div> 2 <script> 3 var div = document.querySelector(".div") 4 div.onclick = function (event) { 5 console.log(event); 6 } 7 div.addEventListener('click', function (event) { 8 console.log(event); 9 }) 10 </script>
重点
常用的事件对象的属性和方法
e.target 返回触发事件的对象 标准
e.srcElement 返回触发事件的对象 非标准
e.type 返回事件的类型 比如click mouseover 不带on
e.stopPropagation() 阻止冒泡 有兼容性问题
1 <div class="box">www</div> 2 <ul> 3 <li>abc1</li> 4 <li>abc2</li> 5 <li>abc3</li> 6 </ul> 7 <a href="http://www.baidu.com">百度</a> 8 <form action="http://www.baidu.com"> 9 <input type="submit" value="提交" name="sub"> 10 </form>
1 var box = document.querySelector(".box") 2 var ul = document.querySelector("ul") 3 box.addEventListener('click', function (e) { 4 console.log(e.target); 5 }) 6 ul.addEventListener('click', function (event) { 7 console.log(event.target) 8 console.log(event.type); 9 // this指向的是谁绑定的事件 10 console.log(this); 11 }) 12 // 阻止默认行为 让链接不跳转或者让添加按钮不添加 13 var a = document.querySelector("a") 14 a.addEventListener('click', function (eve) { 15 eve.preventDefault() //DOM标准写法 16 })
<!-- 阻止冒泡 -->
1 <div class="father"> 2 <div class="son">son</div> 3 </div> 4 <script> 5 var son = document.querySelector(".son") 6 son.addEventListener('click', function (e) { 7 alert("00") 8 e.stopPropagation() 9 }, false) 10 var father = document.querySelector(".father") 11 father.addEventListener('click', function () { 12 alert("father") 13 }, false) 14 document.addEventListener('click', function () { 15 alert("987") 16 }) 17 </script>
事件委托
事件代理,在jQuery里面叫事件委派
事件委托的原理
表示给每个字节点单独设置事件监听,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点
只操作了一次DOM操作 提高程序的性能
1 <ul class="ul"> 2 <li>12345</li> 3 <li>12345</li> 4 <li>12345</li> 5 <li>12345</li> 6 <li>12345</li> 7 </ul> 8 <script> 9 // 事件委托的核心原理 给父节点设置监听器 然后事件冒泡影响下面的子节点 10 var ul = document.querySelector(".ul") 11 ul.addEventListener('click', function (e) { 12 // alert("0000-") 13 e.target.style.backgroundColor = 'pink' 14 }) 15 </script>
来源:https://www.cnblogs.com/xf2764/p/12652292.html