防止冒泡和捕獲

防止冒泡和捕獲

w3c的方法是e.stopPropagation()魁蒜,IE則是使用e.cancelBubble = true

stopPropagation也是事件對象(Event)的一個方法曙寡,作用是阻止目標(biāo)元素的冒泡事件,但是會不阻止默認(rèn)行為佑惠。什么是冒泡事件?如在一個按鈕是綁定一個”click”事件,那么”click”事件會依次在它的父級元素中被觸發(fā) 膜蠢。stopPropagation就是阻止目標(biāo)元素的事件冒泡到父級元素。如:

<div id='div' onclick='alert("div");'>

<ul onclick='alert("ul");'>

<li onclick='alert("li");'>test</li>

</ul>

</div>

上面的代碼莉兰,Demo如下,我們單擊test時挑围,會依次觸發(fā)alert(“l(fā)i”),alert(“ul”),alert(“div”),這就是事件冒泡糖荒。

冒泡事件

阻止冒泡

window.event? window.event.cancelBubble = true : e.stopPropagation();

停止冒泡

//

document.getElementById("test").onclick=function(e){ alert("li"); window.event? window.event.cancelBubble = true : e.stopPropagation(); }

// ]]&gt;·

取消默認(rèn)事件

w3c的方法是e.preventDefault()杉辙,IE則是使用e.returnValue = false;

preventDefault它是事件對象(Event)的一個方法,作用是取消一個目標(biāo)元素的默認(rèn)行為捶朵。既然是說默認(rèn)行為蜘矢,當(dāng)然是元素必須有默認(rèn)行為才能被取消,如果元素本身就沒有默認(rèn)行為综看,調(diào)用當(dāng)然就無效了品腹。什么元素有默認(rèn)行為呢?如鏈接<a>红碑,提交按鈕<input type=”submit”>等舞吭。當(dāng)Event 對象的 cancelable為false時,表示沒有默認(rèn)行為析珊,這時即使有默認(rèn)行為羡鸥,調(diào)用preventDefault也是不會起作用的。

我們都知道唾琼,鏈接<a>的默認(rèn)動作就是跳轉(zhuǎn)到指定頁面兄春,下面就以它為例,阻止它的跳轉(zhuǎn):

//假定有鏈接<a id="testA" >caibaojian.com</a>

var a = document.getElementById("testA");

a.onclick =function(e){

if(e.preventDefault){

e.preventDefault();

}else{

window.event.returnValue == false;

}

}

演示:阻止鏈接跳轉(zhuǎn)的默認(rèn)行為

caibaojian.com

//

var a = document.getElementById("testA"); a.onclick =function(e){ if(e.preventDefault){ e.preventDefault(); }else{ window.event.returnValue == false; } }

// ]]&gt;

return false

javascript的return false只會阻止默認(rèn)行為锡溯,而是用jQuery的話則既阻止默認(rèn)行為又防止對象冒泡赶舆。

下面這個使用原生js,只會阻止默認(rèn)行為祭饭,不會停止冒泡

<div id='div'? onclick='alert("div");'>

<ul? onclick='alert("ul");'>

<li id='ul-a' onclick='alert("li");'><a >caibaojian.com</a></li>

</ul>

</div>

var a = document.getElementById("testB");

a.onclick = function(){

return false;

};

演示:阻止鏈接默認(rèn)行為芜茵,沒有停止冒泡

caibaojian.com

//

var a = document.getElementById("testB"); a.onclick = function(){ return false; };

// ]]&gt;

下面這個是使用jQuery,既阻止默認(rèn)行為又停止冒泡

<div id='div'? onclick='alert("div");'>

<ul? onclick='alert("ul");'>

<li id='ul-a' onclick='alert("li");'><a ,function(){

return false;

});

演示:既停止冒泡又阻止默認(rèn)行為

caibaojian.com

//

$("#testC").on('click',function(){ return false; });

// ]]&gt;

總結(jié)使用方法

當(dāng)需要停止冒泡行為時倡蝙,可以使用

function stopBubble(e) {

//如果提供了事件對象九串,則這是一個非IE瀏覽器

if ( e && e.stopPropagation )

? ? //因此它支持W3C的stopPropagation()方法

? ? e.stopPropagation();

else

? ? //否則,我們需要使用IE的方式來取消事件冒泡

? ? window.event.cancelBubble = true;

}

當(dāng)需要阻止默認(rèn)行為時,可以使用

//code from http://caibaojian.com/javascript-stoppropagation-preventdefault.html//阻止瀏覽器的默認(rèn)行為

function stopDefault( e ) {

? ? //阻止默認(rèn)瀏覽器動作(W3C)

? ? if ( e && e.preventDefault )

? ? ? ? e.preventDefault();

? ? //IE中阻止函數(shù)器默認(rèn)動作的方式

? ? else

? ? ? ? window.event.returnValue = false;

? ? return false;

}

事件注意點

event代表事件的狀態(tài)猪钮,例如觸發(fā)event對象的元素品山、鼠標(biāo)的位置及狀態(tài)、按下的鍵等等烤低;

event對象只在事件發(fā)生的過程中才有效肘交。

firefox里的event跟IE里的不同,IE里的是全局變量扑馁,隨時可用涯呻;firefox里的要用參數(shù)引導(dǎo)才能用,是運行時的臨時變量腻要。

在IE/Opera中是window.event复罐,在Firefox中是event;而事件的對象雄家,在IE中是window.event.srcElement效诅,在Firefox中是event.target,Opera中兩者都可用咳短。

下面兩句效果相同:

function a(e){

var e = (e) ? e : ((window.event) ? window.event : null);

var e = e || window.event; // firefox下window.event為null, IE下event為null

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末填帽,一起剝皮案震驚了整個濱河市蛛淋,隨后出現(xiàn)的幾起案子咙好,更是在濱河造成了極大的恐慌,老刑警劉巖褐荷,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勾效,死亡現(xiàn)場離奇詭異,居然都是意外死亡叛甫,警方通過查閱死者的電腦和手機层宫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來其监,“玉大人萌腿,你說我怎么就攤上這事《犊啵” “怎么了毁菱?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锌历。 經(jīng)常有香客問我贮庞,道長,這世上最難降的妖魔是什么究西? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任窗慎,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘遮斥。我一直安慰自己峦失,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布术吗。 她就那樣靜靜地躺著宠进,像睡著了一般。 火紅的嫁衣襯著肌膚如雪藐翎。 梳的紋絲不亂的頭發(fā)上材蹬,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音吝镣,去河邊找鬼堤器。 笑死,一個胖子當(dāng)著我的面吹牛末贾,可吹牛的內(nèi)容都是我干的闸溃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼拱撵,長吁一口氣:“原來是場噩夢啊……” “哼辉川!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拴测,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤乓旗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后集索,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屿愚,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年务荆,在試婚紗的時候發(fā)現(xiàn)自己被綠了妆距。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡函匕,死狀恐怖娱据,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盅惜,我是刑警寧澤中剩,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站酷窥,受9級特大地震影響咽安,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蓬推,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一妆棒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦糕珊、人聲如沸动分。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澜公。三九已至,卻和暖如春喇肋,著一層夾襖步出監(jiān)牢的瞬間坟乾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工蝶防, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留甚侣,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓间学,卻偏偏與公主長得像殷费,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子低葫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359