js中的事件传播
2019-03-07 21:52
169 查看
js的事件捕获和事件冒泡
事件捕获指的是从document到触发事件的那个节点,是从外到内的触发事件。相反的,事件冒泡是从内到外的触发事件。事件绑定方法的第三个参数,就是控制事件触发顺序。true,事件捕获;false,事件冒泡。默认false,即事件冒泡
<style type="text/css"> #outer{ width: 200px; height: 200px; background: red; } #inner{ width: 100px; height: 100px; background: blue; } </style> <div id="outer"> <div id="inner"></div> </div> <script type="text/javascript"> var outer = document.getElementById("outer"); var inner = document.getElementById("inner"); //由内向外的DOM对象上的事件名一样 inner.addEventListener("click",function(e){ var evt = e || event; console.log("inner"); }) outer.addEventListener("click",function(e){ var evt = e || event; console.log("outer"); }) </script>
冒泡机制:先触发内部节点,后触发外部节点
inner.addEventListener("click",function(e){ var evt = e || event; console.log("inner"); },true) outer.addEventListener("click",function(e){ var evt = e || event; console.log("outer"); },true)
当添加第三个参数为true时,传播顺序由外到内。
事件委托
由于事件冒泡的存在,可以把原本想要绑定到子元素上的事件绑定到父元素上,当满足条件时触发事件,事件委托可以大量节省内存占用,减少事件注册,比如在ul上代理li的事件。即使新增子元素也无需再次对其绑定事件,非常适合动态内容。
<style type="text/css"> li{ background: red; margin: 10px; } </style> <ul id="list"> <li></li> <li></li> <li></li> <li></li> <li></li> </ul> <input type="button" value="更多" id="btn"> <script type="text/javascript"> var oList = document.getElementById("list"); var oBtn = document.getElementById("btn"); var aLi = oList.children; oList.onclick = function(e){ var evt = e || event; var _target = evt.target || evt.srcElement; if(_target.nodeName.toLowerCase() == "li"){ console.log("aa"); } } oBtn.onclick = function(){ for(var i = 0; i < 5; i++){ var oLi = document.createElement("li"); oList.appendChild(oLi); } } </script>
相关文章推荐
- js事件传播流程
- js中事件传播
- js里的事件传播--冒泡
- js事件流传播
- JS阻止事件的传播行为
- JS-----------阻止事件的冒泡传播
- js中事件传播流程
- JS传播事件、取消事件默认行为、阻止事件传播详解
- JS 传播事件、取消事件默认行为、阻止事件传播
- js事件对象兼容处理及传播机制
- Cpage.js组件之间事件传播
- js 阻断事件传播及阻止默认事件
- [js点滴]JavaScript事件传播02
- js 如何阻止事件传播
- 浅谈JS的事件传播流程
- js--5.事件-4.事件传播
- js阻止冒泡事件继续传播
- JS事件传播-冒泡和捕获
- JS中stopPropagation函数停止事件传播
- js 事件阻止传播方法,准确定位事件源