在我們?nèi)粘i_發(fā)中經(jīng)常會碰到使用他們。不知道的時候就百度,然后大概的看一下,試試在我們代碼中使用,如果測試通過就OK了,可能我們不是特別了解他們。下面主要講他們的區(qū)別。
event.stopPropagation()
阻止捕獲和冒泡階段中當(dāng)前事件的進(jìn)一步傳播。停止傳播事件,不會阻止默認(rèn)行為(比如a標(biāo)簽鏈接跳轉(zhuǎn),表單提交,input輸入,復(fù)選框選中)
捕獲:從元素外到里。假如在外層元素添加點擊事件,沒有使用stopPropagation方法的話,如果該外層元素的子元素有點擊事件,那么該子元素的點擊事件也會執(zhí)行。
冒泡:從子元素到父元素,一層一層往外傳播
<div id="parent">
parent
<div id="child">
child
</div>
</div>
<script type="text/javascript">
var parent = document.getElementById('parent');
var child = document.getElementById('child');
parent.onclick = function(e) {
console.log('parent')
}
child.onclick = function(e) {
console.log('child')
}
<script>
點擊parent的區(qū)域(從外到內(nèi)傳播),控制臺輸出,
> parent
> child
點擊child的區(qū)域(從內(nèi)到外傳播),控制臺輸出
> child
> parent
點擊parent,parent點擊事件增加stopPropagation(),控制臺輸出
parent.onclick = function(e) {
e.stopPropagation()
console.log('parent')
}
> parent
點擊child,child點擊事件增加stopPropagation(),控制臺輸出
child.onclick = function(e) {
e.stopPropagation()
console.log('child')
}
> child
event.preventDefault()
阻止默認(rèn)行為,但事件還是繼續(xù)傳播(除非碰到事件調(diào)用stopPropagation或stopImmediatePropagation(),才停止傳播)。默認(rèn)時間是默認(rèn)跳轉(zhuǎn)的,比如a標(biāo)簽跳轉(zhuǎn)(經(jīng)常會碰到阻止頁面跳轉(zhuǎn),這時候就需要調(diào)用這個方法了),復(fù)選框選中,表單提交,輸入框?qū)懭氲鹊取?br>
例子如下:(加了e.preventDefault()頁面不會跳轉(zhuǎn) )
<a id="aTag">百度</a>
<script type="text/javascript">
var aTag = document.getElementById('aTag');
aTag.onclick = function (e) {
e.preventDefault()
}
</script>
return false
阻止事件冒泡,也阻止默認(rèn)行為。一般我們使用的阻止行為盡量避免使用return false,因為有時候我們只需要阻止默認(rèn)行為,但是還需要冒泡,使用return false會導(dǎo)致我們的代碼出現(xiàn)問題。
按照阻止順序:
event.preventDefault()event.stopPropagation()- 停止函數(shù)執(zhí)行并返回