在點擊div中的p時,如何阻止事件冒泡
今天整理筆記,發(fā)現(xiàn)在學習javaScript的過程中,遇到過一個在當時看來很棘手的問題,現(xiàn)在特地總結(jié)一下,也希望能幫助到曾像我一樣迷惘的初學者。
我還是以一個案例來說明問題,html代碼如下:
<div onclick="show('a')"> <p onclick="show('b')"></p> </div>
css代碼如下:
div{ width:500px; height:500px; background:red; } p{ width:200px; height:200px; background:blue; }
js代碼如下:
function show(info){ alert(info); }
稍微懂點js的人都知道當我點擊p時,基于事件冒泡機制,會觸發(fā)父元素div的onclick事件,結(jié)果是先彈出b、再彈出a。
那么問題來了,如何修改show()這個函數(shù)而只彈出b?我第一次的解決方法是(各位大神勿噴):
function show(e,info){ function cancelBubble(e){ e = e || window.event; if (e.stopPropagation) { e.stopPropagation(); }else { e.cancelBubble = true; } } alert(info); }
結(jié)果老是報錯。我就開始各種百度,最終解決方法如下:
function show(info){ alert(info); cancelBubble(); } function cancelBubble(e) { var evt = e ? e : window.event; if (evt.stopPropagation) { //W3C evt.stopPropagation(); }else { //IE evt.cancelBubble = true; } }
至于為什么這樣?我分析的是這樣做有兩個好處:1.阻止了事件冒泡,達到只彈出b目的; 2.將阻止事件冒泡的代碼封裝成了一個函數(shù),可以多次調(diào)用。
好了,問題圓滿解決。
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
JavaScript判斷變量是否為undefined的兩種寫法區(qū)別
這篇文章主要是對JavaScript判斷變量是否為undefined的兩種寫法區(qū)別進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12JS實現(xiàn)定時任務(wù)每隔N秒請求后臺setInterval定時和ajax請求問題
這篇文章主要介紹了JS實現(xiàn)定時任務(wù)每隔N秒請求后臺setInterval定時和ajax請求 的相關(guān)資料,需要的朋友可以參考下2017-10-10關(guān)于JavaScript中var聲明變量作用域的推斷
這個問題其實之前困擾了我很久。如今終于想明白了,特來分享,如果有錯誤的地方,請幫忙指正,我會隨時回來修正滴。2010-12-12將字符串轉(zhuǎn)換成gb2312或者utf-8編碼的參數(shù)(js版)
直接在url中傳遞中文參數(shù)時,讀到的中文都是亂碼,那么我們應(yīng)該怎么將這些參數(shù)轉(zhuǎn)換呢,接下來與大家分享下將字符串轉(zhuǎn)換成utf-8或者gb2312編碼的參數(shù)的技巧2013-04-04js實現(xiàn)數(shù)組內(nèi)數(shù)據(jù)的上移和下移的實例
下面小編就為大家?guī)硪黄猨s實現(xiàn)數(shù)組內(nèi)數(shù)據(jù)的上移和下移的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11基于bootstrap實現(xiàn)廣告輪播帶圖片和文字效果
這篇文章主要介紹了基于bootstrap實現(xiàn)廣告輪播帶圖片和文字效果,效果非常棒,需要的朋友可以參考下2016-07-07Javascript 事件捕獲的備忘(setCapture,captureEvents)
Javascript 事件捕獲的備忘(setCapture,captureEvents)...2006-09-09