事件冒泡,捕獲,委託
阿新 • • 發佈:2018-12-20
冒泡,捕獲事件
IE使用的是事件冒泡,其他瀏覽器則是事件捕獲
他們是描述事件觸發時序問題的術語。事件捕獲指的是從document到觸發事件的那個節點,即自上而下的去觸發事件。相反的,事件冒泡是自下而上的去觸發事件。
繫結事件方法的第三個引數,就是控制事件觸發順序是否為事件捕獲。true,事件捕獲;false,事件冒泡。預設false,即事件冒泡。
Jquery的e.stopPropagation會阻止冒泡,意思就是到我為止,我的爹和祖宗的事件就不要觸發了。
這是HTML結構:
<div id="parent"> <div id="child" class="child"></div> </div>
現在我們給它們繫結上事件
document.getElementById("parent").addEventListener("click",function(e){
alert("parent事件被觸發,"+this.id);
})
document.getElementById("child").addEventListener("click",function(e){
alert("child事件被觸發,"+this.id)
})
結果: child事件被觸發,child parent事件被觸發,parent 結論:先child,然後parent。事件的觸發順序自內向外,這就是事件冒泡。 現在改變第三個引數的值為true
document.getElementById("parent").addEventListener("click",function(e){
alert("parent事件被觸發,"+e.target.id);
},true)
document.getElementById("child").addEventListener("click",function(e){
alert("child事件被觸發,"+e.target.id)
},true)
結果: parent事件被觸發,parent child事件被觸發,child 結論:先parent,然後child。事件觸發順序變更為自外向內,這就是事件捕獲。
執行順序:先捕獲再冒泡
事件冒泡用處 1、子元素太多 2、後插入元素的事件繫結問題 不是所有的事件都能冒泡,例如:blur、focus、load、unload \mouseleave,mouseEnter
事件代理/委託
利用事件冒泡。把子元素的事件繫結給父元素。
$companyList.on('click', 'li', function() {...});
事件委託的侷限性:有些事件沒有冒泡行為,focus,blur沒有