jQuery中的事件傳播


jQuery中的事件傳播也即是javascript中的事件傳播。

事件傳播分為兩個階段,一個是Capture(捕獲)階段,另一個是Bubble(冒泡)階段。

下面就分別講一下這兩個階段。先用一張圖來總體表示一下:

clip_image002

比如說,我們點擊了頁面上id為picture的img元素,暫時只關心click事件,那么實際上它是從根元素html依次遞歸到點擊的元素,這里為img元素,當然如果點擊到了id為son的div元素,它就會遞歸到該div元素,這一階段稱為捕獲階段。該階段中如果有任何祖先元素監聽了click事件,那么都會觸發該事件。

那么,從點擊到的img元素開始,依次向祖先元素遞歸,一直到達頂級祖先元素,這一過程稱為冒泡階段。該階段中,如果有任何祖先元素監聽了click事件,也會觸發。

我們也可以概括為捕獲階段是從祖先元素(根節點)到達目標元素;冒泡階段是從目標元素到達祖先元素(根)。

明白了這一過程后,我們來看一段代碼:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
  $('*').each(function () {
    var current = this;
    this.addEventListener('click', function (event) {
      say('捕獲' + current.tagName + '元素,id為' + current.id + ',目標元素:' + event.target.id);
    }, true);
    this.addEventListener('click', function (event) {
      say('冒泡' + current.tagName + '元素,id為' + current.id + ',目標元素:' + event.target.id);
    }, false);
  })
});
function say(text) {
  $('#show').append('<div>' + text + '</div>');
}
</script>
</head>
<body>
<div id='father'>
  <div id='son'>
    <img id="flower" alt="" src="images/Tulips.jpg" width="300px" height="200px" />
  </div>
</div>
<div id="show">
</div>
</body>
</html>

代碼中使用了addEventListener方法為元素注冊事件。該方法的第一個參數為事件類型,第二個參數為回調方法,第三個參數為在哪一個階段捕獲事件,若為true則是捕獲階段,若為false則是冒泡階段。運行結果:

clip_image003

如果我們想在冒泡階段阻止事件向祖先元素傳播,我們也可以調用Event實例中的stopPropagation()方法。

Demo下載


免責聲明!

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



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