JavaScript 事件冒泡 事件捕獲 取消事件冒泡 取消默認事件


//事件冒泡:結構上存在(非視覺上)嵌套關系的元素,會存在冒泡的功能,即同一事件,自子元素冒泡向父元素,自底向上.
//即如果一個點擊事件發生在子元素上,它會一級級向父元素冒泡.
//注意:是結構上從子元素冒向父元素.
//例如:  如果div1 div2 div3都綁定了點擊事件,點擊div3, div3 div2 div1 的點擊事件都會觸發,觸發順序是3到1,從結構的底層向上冒泡.(其中div1和div2是事件冒泡,div3是事件執行,因為點的就是它).

1   <div>div1
2       <div>div2
3           <div>div3</div>
4        </div>
5   </div>


//事件捕獲:結構上存在(非視覺上)存在嵌套關系的元素,會存在捕獲的功能,即同一事件,自父元素捕獲向子元素(事件源元素),自上向下.
//例如:如果div1 div2 div3都綁定了點擊事件,點擊div3, div1 div2 div3 的點擊事件都會觸發,觸發順序是1到3(其中div1和div2是事件捕獲,div3是事件執行,因為點的就是div3).

//IE上沒有事件捕獲

//同一個對象的同一個事件類型,綁定了兩個事件處理函數,一個遵循冒泡,一個遵循捕獲,那么先捕獲,后冒泡.

//focus blur change submit reset select 等事件不冒泡

 

//事件是天生就有的,一個元素不綁定事件,它也會向上冒泡,只是它自己沒有事件處理程序需要執行,如果父級有綁定事件處理函數,會觸發父級的綁定從而執行對應的函數.
//例如:假設div1綁定了點擊事件,div2沒有綁定事件,但是點擊div2,依然會冒泡到div1,即div1的點擊事件會被觸發執行.

//取消冒泡
//W3C標准: event.stopPropagation() ---->此方法不支持IE9以下版本
//IE獨有: event.cancleBubble = true

//寫法
elem.onclick = function (e){
//e.stopPropagation() //取消冒泡
e.cancleBubble = true
}


//封裝取消冒泡的函數

    function stopBubble(event){
        if(event.stopPropagation){
            event.stopPropagation();
        }else if(event.cancleBubble){
            event.cancleBubble = true;
        }
    }

//取消默認事件
//方法1 return false

//封裝取消默認事件函

    function cancelHandler(e){
        if(e.preventDefault){
            e.preventDefault();  //方法2 W3C   IE9以下不兼容
        }else{
            e.returnValue = false;  //方法3  兼容IE
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM