魚躍于淵

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

          addEventListener-第三個參數 useCapture

          Posted on 2008-12-21 10:02 魚躍于淵 閱讀(1076) 評論(0)  編輯  收藏 所屬分類: javascript相關

          addEventListener 有三個參數:第一個參數表示事件名稱(不含 on,如 "click");第二個參數表示要接收事件處理的函數;第三個參數為 useCapture,本文就講解它。

          1 <div id="outDiv">
          2   <div id="middleDiv">
          3     <div id="inDiv">請在此點擊鼠標。</div>
          4   </div>
          5 </div>
          6 
          7 <div id="info"></div>

           

          1 var outDiv = document.getElementById("outDiv");
          2 var middleDiv = document.getElementById("middleDiv");
          3 var inDiv = document.getElementById("inDiv");
          4 var info = document.getElementById("info");
          5  
          6 outDiv.addEventListener("click"function () { info.innerHTML += "outDiv" + "<br>"; }, false);
          7 middleDiv.addEventListener("click"function () { info.innerHTML += "middleDiv" + "<br>"; }, false);
          8 inDiv.addEventListener("click"function () { info.innerHTML += "inDiv" + "<br>"; }, false);

          上述是我們測試的代碼,根據 info 的顯示來確定觸發的順序,有三個 addEventListener,而 useCapture 可選值為 true 和 false,所以 2*2*2,可以得出 8 段不同的程序。

          • 全為 false 時,觸發順序為:inDiv、middleDiv、outDiv;
          • 全為 true 時,觸發順序為:outDiv、middleDiv、inDiv;
          • outDiv 為 true,其他為 false 時,觸發順序為:outDiv、inDiv、middleDiv;
          • middleDiv 為 true,其他為 false 時,觸發順序為:middleDiv、inDiv、outDiv;
          • ……

          最終得出如下結論:

          • true 的觸發順序總是在 false 之前;
          • 如果多個均為 true,則外層的觸發先于內層;
          • 如果多個均為 false,則內層的觸發先于外層。

          下面提供全部代碼,您可以更改其中的 true、false 值,來進行測試。注意,不適用于 IE。

           1 <?xml version="1.0" encoding="gb2312"?>
           2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
           3 <html xmlns="http://www.w3.org/1999/xhtml">
           4 
           5 <head>
           6 <meta http-equiv="Content-Language" content="zh-cn" />
           7 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
           8 <title>useCapture</title>
           9 <style type="text/css">
          10 #outDiv
          11 {
          12     padding:10px 10px 10px 10px;
          13     border:1px solid red;
          14 }
          15 
          16 #middleDiv
          17 {
          18     padding:10px 10px 10px 10px;
          19     border:1px solid green;
          20 }
          21 
          22 #inDiv
          23 {
          24     padding:10px 10px 10px 10px;
          25     border:1px solid blue;
          26 }
          27 </style>
          28 </head>
          29 
          30 <body>
          31 
          32 <div id="outDiv">
          33   <div id="middleDiv">
          34     <div id="inDiv">請在此點擊鼠標。</div>
          35   </div>
          36 </div>
          37 
          38 <div id="info"></div>
          39 
          40 <script language="javascript" type="text/javascript">
          41 <!--
          42 //千一網絡 www.cftea.com
          43 
          44 var outDiv = document.getElementById("outDiv");
          45 var middleDiv = document.getElementById("middleDiv");
          46 var inDiv = document.getElementById("inDiv");
          47 var info = document.getElementById("info");
          48  
          49 outDiv.addEventListener("click"function () { info.innerHTML += "outDiv" + "<br>"; }, false);
          50 middleDiv.addEventListener("click"function () { info.innerHTML += "middleDiv" + "<br>"; }, false);
          51 inDiv.addEventListener("click"function () { info.innerHTML += "inDiv" + "<br>"; }, false);
          52 //-->
          53 </script>
          54 
          55 </body>
          56 
          57 </html>
          主站蜘蛛池模板: 石城县| 龙南县| 甘洛县| 右玉县| 广西| 合江县| 祁门县| 嵩明县| 铜川市| 都昌县| 资中县| 东平县| 达孜县| 永安市| 榕江县| 称多县| 和顺县| 张家口市| 仁布县| 昭苏县| 香格里拉县| 安徽省| 平原县| 达拉特旗| 启东市| 五寨县| 佛坪县| 灵山县| 连云港市| 疏附县| 秭归县| 山东| 贵港市| 时尚| 建瓯市| 安化县| 大理市| 探索| 杭锦旗| 鄱阳县| 南川市|