﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-mysileng-随笔分类-前台</title><link>http://www.cppblog.com/mysileng/category/20970.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 17 Sep 2014 07:11:23 GMT</lastBuildDate><pubDate>Wed, 17 Sep 2014 07:11:23 GMT</pubDate><ttl>60</ttl><item><title>jQuery之防止冒泡事件 </title><link>http://www.cppblog.com/mysileng/archive/2014/09/17/208340.html</link><dc:creator>鑫龙</dc:creator><author>鑫龙</author><pubDate>Wed, 17 Sep 2014 06:22:00 GMT</pubDate><guid>http://www.cppblog.com/mysileng/archive/2014/09/17/208340.html</guid><wfw:comment>http://www.cppblog.com/mysileng/comments/208340.html</wfw:comment><comments>http://www.cppblog.com/mysileng/archive/2014/09/17/208340.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mysileng/comments/commentRss/208340.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mysileng/services/trackbacks/208340.html</trackback:ping><description><![CDATA[<p>转自：<a href="http://www.cnblogs.com/jiqing9006/archive/2012/09/11/2679831.html">http://www.cnblogs.com/jiqing9006/archive/2012/09/11/2679831.html</a><br /><br />冒泡事件就是点击子节点，会向上触发父节点，祖先节点的点击事件。</p>
<p>下面是html代码部分：</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"></span></div><pre>&lt;body&gt;
&lt;div id=<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">content</span><span style="color: rgb(128,0,0)">"</span>&gt;<span style="color: rgb(0,0,0)">
    外层div元素
    </span>&lt;span&gt;内层span元素&lt;/span&gt;<span style="color: rgb(0,0,0)">
    外层div元素
</span>&lt;/div&gt;

&lt;div id=<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">msg</span><span style="color: rgb(128,0,0)">"</span>&gt;&lt;/div&gt;
&lt;/body&gt;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"></span></div></div>
<p>对应的jQuery代码如下：</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"></span></div><pre>&lt;script type=<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">text/javascript</span><span style="color: rgb(128,0,0)">"</span>&gt;<span style="color: rgb(0,0,0)">
$(function(){
    </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 为span元素绑定click事件</span>
    $(<span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">span</span><span style="color: rgb(128,0,0)">'</span>).bind(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">click</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)">,function(){
        </span><span style="color: rgb(0,0,255)">var</span> txt = $(<span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span>).html() + <span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">&lt;p&gt;内层span元素被点击.&lt;p/&gt;</span><span style="color: rgb(128,0,0)">"</span>;<span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">获取html信息</span>
        $(<span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span>).html(txt);<span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 设置html信息</span>
<span style="color: rgb(0,0,0)">    });
    </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 为div元素绑定click事件</span>
    $(<span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#content</span><span style="color: rgb(128,0,0)">'</span>).bind(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">click</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)">,function(){
        </span><span style="color: rgb(0,0,255)">var</span> txt = $(<span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span>).html() + <span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">&lt;p&gt;外层div元素被点击.&lt;p/&gt;</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)">;
        $(</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(0,0,0)">).html(txt);
    });
    </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 为body元素绑定click事件</span>
    $(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">body</span><span style="color: rgb(128,0,0)">"</span>).bind(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">click</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)">,function(){
        </span><span style="color: rgb(0,0,255)">var</span> txt = $(<span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span>).html() + <span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">&lt;p&gt;body元素被点击.&lt;p/&gt;</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)">;
        $(</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(0,0,0)">).html(txt);
    });
})
</span>&lt;/script&gt;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"></span></div></div>
<p>当点击span时，会触发div与body&nbsp;的点击事件。点击div时会触发body的点击事件。</p>
<p>如何防止这种冒泡事件发生呢？</p>
<p>修改如下：</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"></span></div><pre>&lt;script type=<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">text/javascript</span><span style="color: rgb(128,0,0)">"</span>&gt;<span style="color: rgb(0,0,0)">
$(function(){
       </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 为span元素绑定click事件</span>
    $(<span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">span</span><span style="color: rgb(128,0,0)">'</span>).bind(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">click</span><span style="color: rgb(128,0,0)">"</span>,function(<span style="color: rgb(0,0,255)">event</span><span style="color: rgb(0,0,0)">){
        </span><span style="color: rgb(0,0,255)">var</span> txt = $(<span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span>).html() + <span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">&lt;p&gt;内层span元素被点击.&lt;p/&gt;</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)">;
        $(</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(0,0,0)">).html(txt);
        </span><span style="color: rgb(0,0,255)">event</span>.stopPropagation();    <span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">  阻止事件冒泡</span>
<span style="color: rgb(0,0,0)">    });
    </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 为div元素绑定click事件</span>
    $(<span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#content</span><span style="color: rgb(128,0,0)">'</span>).bind(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">click</span><span style="color: rgb(128,0,0)">"</span>,function(<span style="color: rgb(0,0,255)">event</span><span style="color: rgb(0,0,0)">){
        </span><span style="color: rgb(0,0,255)">var</span> txt = $(<span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span>).html() + <span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">&lt;p&gt;外层div元素被点击.&lt;p/&gt;</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)">;
        $(</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(0,0,0)">).html(txt);
        </span><span style="color: rgb(0,0,255)">event</span>.stopPropagation();    <span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">  阻止事件冒泡</span>
<span style="color: rgb(0,0,0)">    });
    </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 为body元素绑定click事件</span>
    $(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">body</span><span style="color: rgb(128,0,0)">"</span>).bind(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">click</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)">,function(){
        </span><span style="color: rgb(0,0,255)">var</span> txt = $(<span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span>).html() + <span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">&lt;p&gt;body元素被点击.&lt;p/&gt;</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)">;
        $(</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(0,0,0)">).html(txt);
    });
})
</span>&lt;/script&gt;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"></span></div></div>
<p><span style="color: rgb(0,0,255)">event</span>.stopPropagation(); <span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 阻止事件冒泡</span></p>
<p><span style="color: rgb(0,128,0)">&nbsp;</span></p>
<p>有时候点击提交按钮会有一些默认事件。比如跳转到别的界面。但是如果没有通过验证的话，就不应该跳转。这时候可以通过设置event.preventDefault(); //阻止默认行为 ( 表单提交 )。</p>
<p>下面是案例：</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"></span></div><pre>&lt;script type=<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">text/javascript</span><span style="color: rgb(128,0,0)">"</span>&gt;<span style="color: rgb(0,0,0)">
$(function(){
   $(</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">#sub</span><span style="color: rgb(128,0,0)">"</span>).bind(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">click</span><span style="color: rgb(128,0,0)">"</span>,function(<span style="color: rgb(0,0,255)">event</span><span style="color: rgb(0,0,0)">){
         </span><span style="color: rgb(0,0,255)">var</span> username = $(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">#username</span><span style="color: rgb(128,0,0)">"</span>).val();  <span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">获取元素的值，val() 方法返回或设置被选元素的值。</span>
         <span style="color: rgb(0,0,255)">if</span>(username==<span style="color: rgb(128,0,0)">""</span>){     <span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">判断值是否为空</span>
             $(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">"</span>).html(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">&lt;p&gt;文本框的值不能为空.&lt;/p&gt;</span><span style="color: rgb(128,0,0)">"</span>);  <span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">提示信息</span>
             <span style="color: rgb(0,0,255)">event</span>.preventDefault();  <span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">阻止默认行为 ( 表单提交 )</span>
<span style="color: rgb(0,0,0)">         }
   })
})
</span>&lt;/script&gt;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"></span></div></div>
<p>html部分：</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"></span></div><pre>&lt;body&gt;
&lt;form action=<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">test.html</span><span style="color: rgb(128,0,0)">"</span>&gt;<span style="color: rgb(0,0,0)">
用户名：</span>&lt;input type=<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">text</span><span style="color: rgb(128,0,0)">"</span> id=<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">username</span><span style="color: rgb(128,0,0)">"</span> /&gt;
&lt;br/&gt;
&lt;input type=<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">submit</span><span style="color: rgb(128,0,0)">"</span> value=<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">提交</span><span style="color: rgb(128,0,0)">"</span> id=<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">sub</span><span style="color: rgb(128,0,0)">"</span>/&gt;
&lt;/form&gt;

&lt;div id=<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">msg</span><span style="color: rgb(128,0,0)">"</span>&gt;&lt;/div&gt;
&lt;/body&gt;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"></span></div></div>
<p>还有一种防止默认行为的方法就是return&nbsp;false。效果一样。</p>
<p>代码如下：</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"></span></div><pre>&lt;script type=<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">text/javascript</span><span style="color: rgb(128,0,0)">"</span>&gt;<span style="color: rgb(0,0,0)">
$(function(){
   $(</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">#sub</span><span style="color: rgb(128,0,0)">"</span>).bind(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">click</span><span style="color: rgb(128,0,0)">"</span>,function(<span style="color: rgb(0,0,255)">event</span><span style="color: rgb(0,0,0)">){
         </span><span style="color: rgb(0,0,255)">var</span> username = $(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">#username</span><span style="color: rgb(128,0,0)">"</span>).val();  <span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">获取元素的值</span>
         <span style="color: rgb(0,0,255)">if</span>(username==<span style="color: rgb(128,0,0)">""</span>){     <span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">判断值是否为空</span>
             $(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">"</span>).html(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">&lt;p&gt;文本框的值不能为空.&lt;/p&gt;</span><span style="color: rgb(128,0,0)">"</span>);  <span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">提示信息</span>
             <span style="color: rgb(0,0,255)">return</span> <span style="color: rgb(0,0,255)">false</span><span style="color: rgb(0,0,0)">;
         }
   })
})
</span>&lt;/script&gt;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"></span></div></div>
<p>同理，上面的冒泡事件也可以通过return&nbsp;false来处理。</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"></span></div><pre>&lt;script type=<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">text/javascript</span><span style="color: rgb(128,0,0)">"</span>&gt;<span style="color: rgb(0,0,0)">
$(function(){
       </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 为span元素绑定click事件</span>
    $(<span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">span</span><span style="color: rgb(128,0,0)">'</span>).bind(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">click</span><span style="color: rgb(128,0,0)">"</span>,function(<span style="color: rgb(0,0,255)">event</span><span style="color: rgb(0,0,0)">){
        </span><span style="color: rgb(0,0,255)">var</span> txt = $(<span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span>).html() + <span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">&lt;p&gt;内层span元素被点击.&lt;p/&gt;</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)">;
        $(</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(0,0,0)">).html(txt);
        </span><span style="color: rgb(0,0,255)">return</span> <span style="color: rgb(0,0,255)">false</span><span style="color: rgb(0,0,0)">;
    });
    </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 为div元素绑定click事件</span>
    $(<span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#content</span><span style="color: rgb(128,0,0)">'</span>).bind(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">click</span><span style="color: rgb(128,0,0)">"</span>,function(<span style="color: rgb(0,0,255)">event</span><span style="color: rgb(0,0,0)">){
        </span><span style="color: rgb(0,0,255)">var</span> txt = $(<span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span>).html() + <span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">&lt;p&gt;外层div元素被点击.&lt;p/&gt;</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)">;
        $(</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(0,0,0)">).html(txt);
        </span><span style="color: rgb(0,0,255)">return</span> <span style="color: rgb(0,0,255)">false</span><span style="color: rgb(0,0,0)">;
    });
    </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 为body元素绑定click事件</span>
    $(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">body</span><span style="color: rgb(128,0,0)">"</span>).bind(<span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">click</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)">,function(){
        </span><span style="color: rgb(0,0,255)">var</span> txt = $(<span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span>).html() + <span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">&lt;p&gt;body元素被点击.&lt;p/&gt;</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)">;
        $(</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">#msg</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(0,0,0)">).html(txt);
    });
})
</span>&lt;/script&gt;</pre></div><img src ="http://www.cppblog.com/mysileng/aggbug/208340.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mysileng/" target="_blank">鑫龙</a> 2014-09-17 14:22 <a href="http://www.cppblog.com/mysileng/archive/2014/09/17/208340.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>