js冒泡、捕獲事件及阻止冒泡方法詳細(xì)總結(jié)
更新時(shí)間:2014年05月08日 09:36:29 作者:
javascript, jquery的事件中都存在事件冒泡和事件捕獲的問(wèn)題,針對(duì)這兩個(gè)問(wèn)題,本文給出詳細(xì)的解決方法,需要的朋友不要錯(cuò)過(guò)
javascript, jquery的事件中都存在事件冒泡和事件捕獲的問(wèn)題,下面將兩種問(wèn)題及其解決方案做詳細(xì)總結(jié)。
事件冒泡是一個(gè)從子節(jié)點(diǎn)向祖先節(jié)點(diǎn)冒泡的過(guò)程;
事件捕獲剛好相反,是從祖先節(jié)點(diǎn)到子節(jié)點(diǎn)的過(guò)程。
給一個(gè)jquery點(diǎn)擊事件的例子:
代碼如下:
<!DOCTYPE html>
<meta charset="utf-8">
<title>test</title>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(function(){
$('#clickMe').click(function(){
alert('hello');
});
$('body').click(function(){
alert('baby');
});
});
</script>
</head>
<body>
<div style="width:100px;height:100px;background-color:red;">
<button type="button" id="button2">click me</button>
<button id="clickMe">click</button>
</div>
</body>
</html>
事件冒泡現(xiàn)象:點(diǎn)擊 “id=clickMe” 的button,會(huì)先后出現(xiàn)“hello” 和 “baby” 兩個(gè)彈出框。
分析:當(dāng)點(diǎn)擊 “id=clickMe” 的button時(shí),觸發(fā)了綁定在button 和 button 父元素及body的點(diǎn)擊事件,所以先后彈出兩個(gè)框,出現(xiàn)所謂的冒泡現(xiàn)象。
事件捕獲現(xiàn)象:點(diǎn)擊沒(méi)有綁定點(diǎn)擊事件的div和 “id=button2” 的button, 都會(huì)彈出 “baby” 的對(duì)話框。
在實(shí)際的項(xiàng)目中,我們要阻止事件冒泡和事件捕獲現(xiàn)象。
阻止事件冒泡方法:
法1:當(dāng)前點(diǎn)擊事件中return false;
$('#clickMe').click(function(){
alert('hello');
return false;
});
法2:
$('#clickMe').click(function(event){
alert('hello');
var e = window.event || event;
if ( e.stopPropagation ){ //如果提供了事件對(duì)象,則這是一個(gè)非IE瀏覽器
e.stopPropagation();
}else{
//兼容IE的方式來(lái)取消事件冒泡
window.event.cancelBubble = true;
}
});
貌似捕獲事件不能被阻止
事件冒泡是一個(gè)從子節(jié)點(diǎn)向祖先節(jié)點(diǎn)冒泡的過(guò)程;
事件捕獲剛好相反,是從祖先節(jié)點(diǎn)到子節(jié)點(diǎn)的過(guò)程。
給一個(gè)jquery點(diǎn)擊事件的例子:
代碼如下:
復(fù)制代碼 代碼如下:
<!DOCTYPE html>
<meta charset="utf-8">
<title>test</title>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(function(){
$('#clickMe').click(function(){
alert('hello');
});
$('body').click(function(){
alert('baby');
});
});
</script>
</head>
<body>
<div style="width:100px;height:100px;background-color:red;">
<button type="button" id="button2">click me</button>
<button id="clickMe">click</button>
</div>
</body>
</html>
事件冒泡現(xiàn)象:點(diǎn)擊 “id=clickMe” 的button,會(huì)先后出現(xiàn)“hello” 和 “baby” 兩個(gè)彈出框。
分析:當(dāng)點(diǎn)擊 “id=clickMe” 的button時(shí),觸發(fā)了綁定在button 和 button 父元素及body的點(diǎn)擊事件,所以先后彈出兩個(gè)框,出現(xiàn)所謂的冒泡現(xiàn)象。
事件捕獲現(xiàn)象:點(diǎn)擊沒(méi)有綁定點(diǎn)擊事件的div和 “id=button2” 的button, 都會(huì)彈出 “baby” 的對(duì)話框。
在實(shí)際的項(xiàng)目中,我們要阻止事件冒泡和事件捕獲現(xiàn)象。
阻止事件冒泡方法:
法1:當(dāng)前點(diǎn)擊事件中return false;
復(fù)制代碼 代碼如下:
$('#clickMe').click(function(){
alert('hello');
return false;
});
法2:
復(fù)制代碼 代碼如下:
$('#clickMe').click(function(event){
alert('hello');
var e = window.event || event;
if ( e.stopPropagation ){ //如果提供了事件對(duì)象,則這是一個(gè)非IE瀏覽器
e.stopPropagation();
}else{
//兼容IE的方式來(lái)取消事件冒泡
window.event.cancelBubble = true;
}
});
貌似捕獲事件不能被阻止
相關(guān)文章
我也種棵OO樹(shù)JXTree[js+css+xml]
我也種棵OO樹(shù)JXTree[js+css+xml]...2007-04-04
Javascript實(shí)現(xiàn)關(guān)聯(lián)數(shù)據(jù)(Linked Data)查詢及注意細(xì)節(jié)
DBpedia對(duì)Wikipedia的數(shù)據(jù)變成Linked Data形式,使得機(jī)器也能讀懂并自由獲得這些數(shù)據(jù);本文的主要目的是利用Javascript從DBpedia中獲取我們想要的數(shù)據(jù),感興趣的朋友可以參考下,希望可以幫助到你2013-02-02
基于百度地圖實(shí)現(xiàn)產(chǎn)品銷售的單位位置查看功能設(shè)計(jì)與實(shí)現(xiàn)
這篇文章主要介紹了基于百度地圖實(shí)現(xiàn)產(chǎn)品銷售的單位位置查看功能設(shè)計(jì)與實(shí)現(xiàn)的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10
canvas 畫(huà)布在主流瀏覽器中的尺寸限制詳細(xì)介紹
這篇文章主要介紹了canvas 畫(huà)布在主流瀏覽器中的尺寸限制詳細(xì)介紹的相關(guān)資料,canvas在不同瀏覽器下面有不同的最大尺寸限制,這里測(cè)試下,需要的朋友可以參考下2016-12-12
javascript將ip地址第四段用星號(hào)代替的兩種方法
javascript將ip地址第四段用星號(hào)代替的方法,需要的朋友可以參考下。2010-03-03
使用純javascript實(shí)現(xiàn)經(jīng)典掃雷游戲
本文給大家分享的是個(gè)人剛開(kāi)始學(xué)習(xí)javascript的時(shí)候?qū)懙姆聎indows經(jīng)典的掃雷游戲的代碼,當(dāng)時(shí)只是寫(xiě)了下來(lái),沒(méi)加注釋,這里補(bǔ)上,有需要的小伙伴可以參考下。2015-04-04

