寫程序的時(shí)候遇到問題去搜索喇辽,有時(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)事件本身沒有默認(rèn)行為,即event.cancelable=false時(shí)绕沈,阻止是不會(huì)起作用的锐想。
什么是冒泡行為呢?
即在某個(gè)對(duì)象上觸發(fā)某個(gè)事件乍狐,事件會(huì)從發(fā)生的目標(biāo)event.target開始依次向上一級(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來表示調(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