默認(rèn)事件

js冒泡和捕獲是事件的兩種行為,使用event.stopPropagation()起到阻止捕獲和冒泡階段中當(dāng)前事件的進(jìn)一步傳播眶拉。使用event.preventDefault()可以取消默認(rèn)事件罗晕。對(duì)于冒泡和捕獲的優(yōu)先順序請(qǐng)看之前文章:JavaScript捕獲和冒泡探討

防止冒泡和捕獲

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

stopPropagation也是事件對(duì)象(Event)的一個(gè)方法,作用是阻止目標(biāo)元素的冒泡事件小渊,但是會(huì)不阻止默認(rèn)行為法褥。什么是冒泡事件?如在一個(gè)按鈕是綁定一個(gè)”click”事件酬屉,那么”click”事件會(huì)依次在它的父級(jí)元素中被觸發(fā) 半等。stopPropagation就是阻止目標(biāo)元素的事件冒泡到父級(jí)元素。如:

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

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

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

</ul>

</div>

上面的代碼,Demo如下,我們單擊test時(shí)酱鸭,會(huì)依次觸發(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它是事件對(duì)象(Event)的一個(gè)方法烁登,作用是取消一個(gè)目標(biāo)元素的默認(rèn)行為。既然是說(shuō)默認(rèn)行為蔚舀,當(dāng)然是元素必須有默認(rèn)行為才能被取消饵沧,如果元素本身就沒(méi)有默認(rèn)行為,調(diào)用當(dāng)然就無(wú)效了赌躺。什么元素有默認(rèn)行為呢狼牺?如鏈接<a>,提交按鈕<input type=”submit”>等礼患。當(dāng)Event 對(duì)象的 cancelable為false時(shí)是钥,表示沒(méi)有默認(rèn)行為,這時(shí)即使有默認(rèn)行為缅叠,調(diào)用preventDefault也是不會(huì)起作用的悄泥。

我們都知道,鏈接<a>的默認(rèn)動(dòng)作就是跳轉(zhuǎn)到指定頁(yè)面肤粱,下面就以它為例弹囚,阻止它的跳轉(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只會(huì)阻止默認(rèn)行為,而是用jQuery的話則既阻止默認(rèn)行為又防止對(duì)象冒泡领曼。

下面這個(gè)使用原生js鸥鹉,只會(huì)阻止默認(rèn)行為,不會(huì)停止冒泡

<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)行為庶骄,沒(méi)有停止冒泡

caibaojian.com

//

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

// ]]&gt;

下面這個(gè)是使用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)需要停止冒泡行為時(shí),可以使用

function stopBubble(e) {

//如果提供了事件對(duì)象瓢姻,則這是一個(gè)非IE瀏覽器

if ( e && e.stopPropagation )

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

? ? e.stopPropagation();

else

? ? //否則祝蝠,我們需要使用IE的方式來(lái)取消事件冒泡

? ? window.event.cancelBubble = true;

}

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

//阻止瀏覽器的默認(rèn)行為

function stopDefault( e ) {

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

? ? if ( e && e.preventDefault )

? ? ? ? e.preventDefault();

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

? ? else

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

? ? return false;

}

事件注意點(diǎn)

event代表事件的狀態(tài)幻碱,例如觸發(fā)event對(duì)象的元素、鼠標(biāo)的位置及狀態(tài)细溅、按下的鍵等等褥傍;

event對(duì)象只在事件發(fā)生的過(guò)程中才有效。

firefox里的event跟IE里的不同喇聊,IE里的是全局變量恍风,隨時(shí)可用;firefox里的要用參數(shù)引導(dǎo)才能用,是運(yùn)行時(shí)的臨時(shí)變量朋贬。

在IE/Opera中是window.event凯楔,在Firefox中是event;而事件的對(duì)象锦募,在IE中是window.event.srcElement摆屯,在Firefox中是event.target,Opera中兩者都可用糠亩。

下面兩句效果相同:

//code from http://caibaojian.com/javascript-stoppropagation-preventdefault.htmlfunction 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)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末虐骑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赎线,更是在濱河造成了極大的恐慌廷没,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垂寥,死亡現(xiàn)場(chǎng)離奇詭異颠黎,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)滞项,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門狭归,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蓖扑,你說(shuō)我怎么就攤上這事唉铜。” “怎么了律杠?”我有些...
    開(kāi)封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵潭流,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我柜去,道長(zhǎng)灰嫉,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任嗓奢,我火速辦了婚禮讼撒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘股耽。我一直安慰自己根盒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布物蝙。 她就那樣靜靜地躺著炎滞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诬乞。 梳的紋絲不亂的頭發(fā)上册赛,一...
    開(kāi)封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天钠导,我揣著相機(jī)與錄音,去河邊找鬼森瘪。 笑死牡属,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扼睬。 我是一名探鬼主播逮栅,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼痰驱!你這毒婦竟也來(lái)了证芭?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤担映,失蹤者是張志新(化名)和其女友劉穎废士,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蝇完,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡官硝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了短蜕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氢架。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖朋魔,靈堂內(nèi)的尸體忽然破棺而出岖研,到底是詐尸還是另有隱情,我是刑警寧澤警检,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布孙援,位于F島的核電站,受9級(jí)特大地震影響扇雕,放射性物質(zhì)發(fā)生泄漏拓售。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一镶奉、第九天 我趴在偏房一處隱蔽的房頂上張望础淤。 院中可真熱鬧,春花似錦哨苛、人聲如沸鸽凶。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吱瘩。三九已至,卻和暖如春迹缀,著一層夾襖步出監(jiān)牢的瞬間使碾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工祝懂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留票摇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓砚蓬,卻偏偏與公主長(zhǎng)得像矢门,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灰蛙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 這個(gè)問(wèn)題也是老生常談了摩梧,寫這篇文章的主要目的是進(jìn)行下梳理物延,了解自己知識(shí)點(diǎn)的掌握程度,也希望對(duì)大家有所幫助仅父。 在說(shuō)如...
    一木_qintb閱讀 4,278評(píng)論 1 4
  • 1.背景介紹 事件冒泡: 在一個(gè)對(duì)象上觸發(fā)某類事件(比如點(diǎn)擊事件)叛薯,如果此對(duì)象定義了此事件的處理程序,那么此事件就...
    zxcdino閱讀 1,270評(píng)論 1 0
  • ??JavaScript 與 HTML 之間的交互是通過(guò)事件實(shí)現(xiàn)的。 ??事件省容,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,477評(píng)論 1 11
  • 有錯(cuò)誤歡迎指出腥椒,一定及時(shí)修改 “return false”方法會(huì)終止元素的默認(rèn)行為阿宅、阻止事件冒泡靶端、以及其他實(shí)際場(chǎng)景...
    為何活著閱讀 2,476評(píng)論 0 0
  • 今天中午吃飯 看到一對(duì)父子 父親很細(xì)心的照顧所有 突然想念老爸了 記憶中好像數(shù)不出來(lái)幾次老爸或老媽單獨(dú)陪伴在外吃飯...
    于無(wú)聲處Nicole閱讀 631評(píng)論 2 3