前端中的事件流


  面試題中的一道題目。

  事件流:描述的是事件發生的順序。

  包含的三個階段:

  •     事件捕獲階段
  •     處於目標階段
  •     事件冒泡階段

事件捕獲階段

這是一個從上而下的過程,越高級的父級元素越早接到事件。

例:

1.  如點擊li元素會先觸發ul元素。

注意:如果在li上綁定click事件,那么新添加的li元素不會有這個click事件。此時應該在ul上綁定事件,根據事件捕獲的原理,事件會自上而下傳遞給li。通過event.target找到這個li元素。

這種方式被稱為事件委托。

2.  目標元素有子元素。如希望綁定到li上,但li有子元素,則event.target變成了子元素。

此時需要組織事件捕獲的傳遞。這個時候可以給子元素添加css:  li>* {pointer-events:none;}

jquery通過on方法解決了這個問題: $('ul').on('click','li',function(event){//code});

 

事件冒泡

讓DOM樹最底層的目標元素最先接收到事件,然后向上傳遞,是一個自下而上的過程。

如button和button的父元素都添加了click事件,當點擊button的時候,button和其父元素的點擊事件都會執行,自下而上的順序執行。這個事件需要阻止冒泡事件。

解決方法:

$('button').click(function(e){   //可以是任何需要阻止冒泡的元素。

   e.stopPropagation();

//ie

  e.cancelBubble = true;

})

 

 

一些不支持冒泡的事件:

blur:元素失去焦點時觸發,不支持冒泡。

focus: 元素獲得焦點時觸發,不支持冒泡。

mouseenter:鼠標移入元素觸發,不支持冒泡。

mouseleave:鼠標移出元素時觸發,不支持冒泡。

 


免責聲明!

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



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