利用JQuery阻止事件冒泡
冒泡事件就是點(diǎn)擊子節(jié)點(diǎn),會(huì)向上觸發(fā)父節(jié)點(diǎn),祖先節(jié)點(diǎn)的點(diǎn)擊事件。
我們在平時(shí)的開發(fā)過程中,肯定會(huì)遇到在一個(gè)div(這個(gè)div可以是元素)包裹一個(gè)div的情況,但是呢,在這兩個(gè)div上都添加了事件,如果點(diǎn)擊里面的div我們希望處理這個(gè)div的事件,但是呢,我們不希望外層的div的事件也執(zhí)行,這時(shí)候我們就要用到阻止冒泡。
通俗點(diǎn)來說吧,你在家里看電視,躲在自己的小房間,但是你不希望聲音傳到隔壁父母的耳朵里,這時(shí)候,你可能躲在被窩里,或者墻壁的隔音效果很好,阻隔聲音可以理解為阻止冒泡。
<style>
#content{
width: 140px;
border: 1px solid blue;
}
#msg{
width: 100px;
height: 100px;
margin: 20px;
border: 1px solid red;
}
</style>
<body>
<div id="content">
外層div
<div id="msg">
內(nèi)層div
</div>
</div>
</body>
顯示結(jié)果

對應(yīng)的jQuery代碼如下:
<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(function(){
// 為內(nèi)層div綁定click事件
$("#msg").click(function(){
alert("我是小div");
});
// 為外層div元素綁定click事件
$("#content").click(function(){
alert("我是大div");
});
// 為body元素綁定click事件
$("body").click(function(){
alert("我是body");
});
});
</script>
當(dāng)點(diǎn)擊小div時(shí),會(huì)觸發(fā)大div與body 的點(diǎn)擊事件。點(diǎn)擊大div時(shí)會(huì)觸發(fā)body的點(diǎn)擊事件。
如何防止這種冒泡事件發(fā)生呢?
修改如下:
event.stopPropagation(); // 阻止事件冒泡
有時(shí)候點(diǎn)擊提交按鈕會(huì)有一些默認(rèn)事件。比如跳轉(zhuǎn)到別的界面。但是如果沒有通過驗(yàn)證的話,就不應(yīng)該跳轉(zhuǎn)。這時(shí)候可以通過設(shè)置event.preventDefault(); //阻止默認(rèn)行為 ( 表單提交 )。
html部分
<body> <form action="test.html"> 用戶名:<input type="text" id="username" /> <br/> <input type="submit" value="提交" id="sub"/> </form> </body>

<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(function(){
$("#sub").click(function(event){
//獲取元素的值,val() 方法返回或設(shè)置被選元素的值。
var username = $("#username").val();
//判斷值是否為空
if(username==""){
//提示信息
//alert("文本框的值不能為空");
$("#msg").html("<p>文本框的值不能為空.</p>");
//阻止默認(rèn)行為 ( 表單提交 )
event.preventDefault();
}
});
});
</script>
//阻止默認(rèn)行為 ( 表單提交 )
event.preventDefault();
還有一種防止默認(rèn)行為的方法就是return false。效果一樣。
代碼如下:
<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(function(){
$("#sub").click(function(event){
//獲取元素的值,val() 方法返回或設(shè)置被選元素的值。
var username = $("#username").val();
//判斷值是否為空
if(username==""){
//提示信息
//alert("文本框的值不能為空");
$("#msg").html("<p>文本框的值不能為空.</p>");
//阻止默認(rèn)行為 ( 表單提交 )
//event.preventDefault();
return false;
}
});
});
</script>
同理,上面的冒泡事件也可以通過return false來處理。
<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(function(){
// 為內(nèi)層div綁定click事件
$("#msg").click(function(event){
alert("我是小div");
//event.stopPropagation(); // 阻止事件冒泡
return false;
});
// 為外層div元素綁定click事件
$("#content").click(function(event){
alert("我是大div");
//event.stopPropagation(); // 阻止事件冒泡
return false;
});
// 為body元素綁定click事件
$("body").click(function(event){
alert("我是body");
//event.stopPropagation(); // 阻止事件冒泡
return false;
});
});
以上就是本文的全部內(nèi)容,希望對大家有所幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
ie8模式下click無反應(yīng)點(diǎn)擊option無反應(yīng)的解決方法
點(diǎn)擊select里面的option,將其賦值到上面的input,直接用jQuery寫的,問題是在用IE8打開的時(shí)候,點(diǎn)擊option沒有任何反應(yīng)2014-10-10
JQuery+EasyUI輕松實(shí)現(xiàn)步驟條效果
jQuery EasyUI 提供易于使用的組件,它使 Web 開發(fā)人員能快速地在流行的 jQuery 核心和 HTML5 上建立程序頁面。通過本文給大家介紹JQuery+EasyUI輕松實(shí)現(xiàn)步驟條效果,需要的朋友參考下2016-02-02
基于jQuery實(shí)現(xiàn)多層次的手風(fēng)琴效果附源碼
今天我們要與大家分享一個(gè)漂亮而靈活的垂直 jQuery 手風(fēng)琴效果。其主要思想是擴(kuò)大手風(fēng)琴片上的點(diǎn)擊和顯示更多的信息。感興趣的朋友可以參考下本文2015-09-09
jQuery學(xué)習(xí)筆記 操作jQuery對象 CSS處理
在對class屬性的操作中,實(shí)際上已經(jīng)改變元素樣式了,但這些都是根據(jù)已設(shè)定的CSS規(guī)則間接生效的。因此我們有必要使用更為直接的方式來改變原先設(shè)定好了的CSS規(guī)則2012-09-09
jQuery實(shí)現(xiàn)元素拖拽并cookie保存順序的方法
這篇文章主要介紹了jQuery實(shí)現(xiàn)元素拖拽并cookie保存順序的方法,涉及jQuery響應(yīng)鼠標(biāo)事件實(shí)現(xiàn)頁面元素屬性變換的技巧與使用jQuery的cookie插件保存頁面信息的功能,需要的朋友可以參考下2016-02-02

