4.1.4: jQuery的事件冒泡

1. 什么是冒泡:

在页面上可以有多个事件,也可以多个元素响应同一个事件。假设网页上有两个元素,其中一个元素嵌套在另一个元素里,并且都被绑定了click事件,同时body元素上也绑定了click事件。代码如下:

 1 <html>
 2 <head>
 3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 4 <title>Insert title here</title>
 5 <style type="text/css">
 6 *{
 7     margin:0;
 8     padding:0
 9 }
10 body{
11     font-size:13px;
12     line-height:130%;
13     padding:60px
14 }
15 #content{
16     width:220px;
17     border:1px solid #0050D0;
18     background:#96E555
19 }
20 span{
21     width:200px;
22     margin:10px;
23     background:#666666;
24     cursor:pointer;
25     color:white;
26     display:block
27 }
28 p{
29     width:200px;
30     background:#888;
31     color:white;
32     height:16px
33 }
34 </style>
35 <script src="jQuery/jquery-1.3.1.js"></script>
36 <script type="text/javascript">
37     $(function(){
38         $("span").bind("click",function(){
39             var txt=$("#msg").html()+"<p>内层span元素被单击</p>";
40             $("#msg").html(txt);
41         });
42         $("#content").bind("click",function(){
43             var txt=$("#msg").html()+"<p>外层div元素被单击</p>";
44             $("#msg").html(txt);
45         });
46         $("body").bind("click",function(){
47             var txt=$("#msg").html()+"<p>body元素被单击</p>";
48             $("#msg").html(txt);
49         });
50     });
51 </script>
52 </head>
53 <body>
54 <div id="content">
55     外层div元素
56         <span>内层span元素</span>
57     外层div元素
58 </div>
59 
60 <div id="msg"></div>
61 </body>
62 </html>

页面初始化效果如下:

当单击内部span元素,即触发span元素的click事件时,会输出3条记录:

这就是事件冒泡。

2. 事件冒泡引发的问题:

 

 当用户名为空时,单击"提交"按钮,会出现如下图所示:

可见preventDefault()方法能够阻止表单的提交行为。

如果想同时对事件对象停止冒泡和默认行为,可以在事件处理函数中返回false。这是对在事件对象上同时调用stopPropagation()方法和preventDefault()方法的一种简写形式。在表单的例子中,可以把event.preventDefault()改写为:

1 return false;

也可以把事件冒泡例子中event.stopPropagation()改写为:

1 return false;

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。