鱼跃于渊

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

addEventListener-第三个参数 useCapture

Posted on 2008-12-21 10:02 鱼跃于渊 阅读(1073) 评论(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>

只有注册用户登录后才能发表评论。


网站导航: