關於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:
看出差別了嗎?是不是很清晰了?