1. 程式人生 > >事件冒泡,捕獲,委託

事件冒泡,捕獲,委託

冒泡,捕獲事件

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沒有