JS事件中的冒泡和默認(rèn)行為

寫(xiě)程序的時(shí)候遇到問(wèn)題去搜索,有時(shí)候會(huì)看到 preventDefault()和stopPropagation()兩種代碼。幾乎所有的文章作者則解釋為:阻止默認(rèn)行為/冒泡行為。但是這兩句代碼一直讓我困惑了很久,什么算是默認(rèn)行為?這兩種代碼有什么區(qū)別?所以這篇文章里,就算是自己研究后的一篇總結(jié)。

首先,要先了解什么是默認(rèn)行為。

js中事件有自己的默認(rèn)行為,例如,點(diǎn)擊a標(biāo)簽就會(huì)跳轉(zhuǎn),點(diǎn)擊表單提交則會(huì)提交,單擊右鍵就會(huì)出現(xiàn)菜單。有些時(shí)候需要取消這些事件的默認(rèn)行為,就用到了event.preventDefault(), 對(duì)于老的IE瀏覽器,則為event.returnValue = false; 但是當(dāng)事件本身沒(méi)有默認(rèn)行為,即event.cancelable=false時(shí),阻止是不會(huì)起作用的。

什么是冒泡行為呢?

即在某個(gè)對(duì)象上觸發(fā)某個(gè)事件,事件會(huì)從發(fā)生的目標(biāo)event.target開(kāi)始依次向上一級(jí)標(biāo)簽尋找,直到document。要取消冒泡行為則用event.stopPropagation(), IE則用event.cancelBubble = true; 阻止后則只會(huì)觸發(fā)自身的事件,不會(huì)再向上一級(jí)尋找。

不是所有的事件都能冒泡。如focus, blur等,這些事件僅發(fā)生在自己身上,父元素不會(huì)產(chǎn)生該事件。

如果想要同時(shí)阻止事件默認(rèn)行為和冒泡行為,可以在事件函數(shù)中返回false來(lái)表示調(diào)用preventDefault()和stopPropagation()兩個(gè)方法。

如:

?$(":submit").click(function(event) {

? ? if($(".input").val() =="") {

? ? ? ? ?alert("用戶名不能為空");

? ? ? ? return ?false; //阻止提交按鈕的默認(rèn)行為(提交表單)和事件冒泡

? ? }

})

以上~

參考:

1. http://www.jb51.net/article/42492.htm

2. http://blog.csdn.net/dzahao/article/details/52809818

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容