魚躍于淵

          First know how, Second know why !
          posts - 0, comments - 1, trackbacks - 0, articles - 49

          addEventListener-事件流

          Posted on 2008-12-21 09:57 魚躍于淵 閱讀(225) 評論(0)  編輯  收藏 所屬分類: javascript相關(guān)

          說到 addEventListener 不得不說到事件流,先說事件流對后面的解釋比較方便。

          當一個事件發(fā)生時,分為三個階段:

          捕獲階段 從根節(jié)點開始順序而下,檢測每個節(jié)點是否注冊了事件處理程序。如果注冊了事件處理程序,并且 useCapture 為 true,則調(diào)用該事件處理程序。(IE 中無此階段。)

          目標階段 觸發(fā)在目標對象本身注冊的事件處理程序,也稱正常事件派發(fā)階段

          冒泡階段 從目標節(jié)點到根節(jié)點,檢測每個節(jié)點是否注冊了事件處理程序,如果注冊了事件處理程序,并且 useCapture 為 false,則調(diào)用該事件處理程序。

          舉例

          1 <div id="div1">
          2   <div id="div2">
          3     <div id="div3">
          4       <div id="div4">
          5       </div>
          6     </div>
          7   </div>
          8 </div>

          如果在 d3 上點擊鼠標,事件流是這樣的:

          捕獲階段 在 div1 處檢測是否有 useCapture 為 true 的事件處理程序,若有,則執(zhí)行該程序,然后再同樣地處理 div2。

          目標階段 在 div3 處,發(fā)現(xiàn) div3 就是鼠標點擊的節(jié)點,所以這里為目標階段,若有事件處理程序,則執(zhí)行該程序,這里不論 useCapture 為 true 還是 false。

          冒泡階段 在 div2 處檢測是否有 useCapture 為 false 的事件處理程序,若有,則執(zhí)行該程序,然后再同樣地處理 div1。

          注意,上述捕獲階段和冒泡階段中,實際上 div1 之上還應該有結(jié)點,比如有 body,但這里不討論。

          主站蜘蛛池模板: 贵州省| 望奎县| 芷江| 奈曼旗| 洛阳市| 祁阳县| 正镶白旗| 新巴尔虎左旗| 乌兰县| 凉城县| 夏邑县| 海丰县| 锦屏县| 昭通市| 光泽县| 吴江市| 临颍县| 万盛区| 琼结县| 丽江市| 社旗县| 象山县| 左云县| 东乌| 衡阳市| 东光县| 屏山县| 泰兴市| 贵德县| 遵义县| 林西县| 平顶山市| 墨玉县| 定南县| 习水县| 临洮县| 苏尼特右旗| 东明县| 雷波县| 麦盖提县| 翁牛特旗|