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>