简单理解:
事件冒泡:页面上有这么一个节点树,div>ul>li>a;比如给最里面的a加一个click点击事件,那么这个事件就会一层一层的往外执行,执行顺序a>li>ul>div,即自下而上触发事件。
事件捕获:跟上面的正好相反,自上而下触发事件,也就是从外到里。
示例:
<ul id="ul1"><li id="li1">111</li><li>222</li><li>333</li><li>444</li></ul>
绑定事件:
document.getElementById("ul1").addEventListener("click",function(e){alert("ul事件被触发,"+this.id);})document.getElementById("li1").addEventListener("click",function(e){alert("li事件被触发,"+this.id)})
现在去点击111那行,执行结果是:
li事件被触发,li1ul事件被触发,ul1
很明显是事件冒泡,自下而上,从里向外触发事件。
要注意:绑定事件方法有3个参数,第三个参数就是控制事件触发顺序是否为事件捕获。true,事件捕获;false,事件冒泡。默认false,即事件冒泡。
改变参数,测试事件捕获:
document.getElementById("ul1").addEventListener("click",function(e){alert("ul事件被触发,"+this.id);},true)document.getElementById("li1").addEventListener("click",function(e){alert("li事件被触发,"+this.id)},true)
现在去点击111那行:
ul事件被触发,ul1li事件被触发,li1
执行结果显示,从外向里执行事件。
应用:
事件委托会用到事件冒泡的原理:也就是说只需要给ul绑定事件就可以了,点击li时由于冒泡机制会自己执行ul绑定的事件,从而避免li过多,逐条绑定事件造成的性能问题