1. 程式人生 > >關於JS中事件捕獲,事件冒泡與事件代理(事件委託),及e.target與e.currentcurrentTarget的區別

關於JS中事件捕獲,事件冒泡與事件代理(事件委託),及e.target與e.currentcurrentTarget的區別

事件捕獲:

       表示事件的觸發順序,當繫結事件方法的第三個引數值設定為true時,事件觸發的順序為捕獲。

       當一個元素的事件被觸發的時候(如onclick事件),該事件會從document開始逐級向下傳播,到當前觸發事件的節點元素的點選事件。

設有一DIV,其父級元素繫結事件A,其本身繫結事件B,點選到這個DIV時執行的事件順序為AB。

 

 

事件冒泡:

       表示事件的觸發順序,當繫結事件方法的第三個引數值設定為false時,事件觸發的順序為冒泡。這個引數不作設定時,預設值為false,即預設事件冒泡;

       當一個子元素的事件被觸發的時候(如onclick事件),該事件會從事件源(被點選的子元素)開始逐級向上傳播,觸發父級元素的點選事件。

設有一DIV,其父級元素繫結事件A,其本身繫結事件B,點選到這個DIV時執行的事件順序為BA。

 

事件代理/委託(本質是利用事件冒泡)

      利用事件冒泡處理動態元素事件繫結的方法,專業術語叫事件委託。

 

*事件委託案例題目(經典面試題):

<ul>

        <li>item1</li>

        <li>item2</li>

        <li>item3</li>    

</ul>

需求:滑鼠放到li上對應的li背景變灰。且繫結的事件對動態新增的li元素有效。

答案:

$("ul").on("mouseover",function(e){

          //這裡涉及到了e.target屬性的使用

          $(e.target).css(CSS1).siblings().css(CSS2);

 })

有很多小白對這個屬性並不是很理解,

e.target屬性指向觸發事件監聽的物件,即如(click事件)點選的當前元素;

e. currentTarget屬性指向新增監聽事件的物件,即等同於this;

emmmmmm文字很難理解?那舉個很簡單的例子:

然後我們依次點選兩個item:

看出差別了嗎?是不是很清晰了?