在點(diǎn)擊div中的p時(shí),如何阻止事件冒泡
今天整理筆記,發(fā)現(xiàn)在學(xué)習(xí)javaScript的過程中,遇到過一個(gè)在當(dāng)時(shí)看來很棘手的問題,現(xiàn)在特地總結(jié)一下,也希望能幫助到曾像我一樣迷惘的初學(xué)者。
我還是以一個(gè)案例來說明問題,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);
}
稍微懂點(diǎn)js的人都知道當(dāng)我點(diǎn)擊p時(shí),基于事件冒泡機(jī)制,會(huì)觸發(fā)父元素div的onclick事件,結(jié)果是先彈出b、再?gòu)棾鯽。
那么問題來了,如何修改show()這個(gè)函數(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é)果老是報(bào)錯(cuò)。我就開始各種百度,最終解決方法如下:
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;
}
}
至于為什么這樣?我分析的是這樣做有兩個(gè)好處:1.阻止了事件冒泡,達(dá)到只彈出b目的; 2.將阻止事件冒泡的代碼封裝成了一個(gè)函數(shù),可以多次調(diào)用。
好了,問題圓滿解決。
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
JavaScript中Number對(duì)象的toFixed() 方法詳解
下面小編就為大家?guī)硪黄狫avaScript中Number對(duì)象的toFixed() 方法詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09
JS/jquery實(shí)現(xiàn)一個(gè)網(wǎng)頁內(nèi)同時(shí)調(diào)用多個(gè)倒計(jì)時(shí)的方法
這篇文章主要介紹了JS/jquery實(shí)現(xiàn)一個(gè)網(wǎng)頁內(nèi)同時(shí)調(diào)用多個(gè)倒計(jì)時(shí)的方法,涉及js與jQuery基于定時(shí)器的時(shí)間相關(guān)操作技巧,需要的朋友可以參考下2017-04-04
BootStrap Table對(duì)前臺(tái)頁面表格的支持實(shí)例講解
bootstrap-table是在bootstrap的基礎(chǔ)上面做了一些封裝,所以在使用bootstrap-table之前要導(dǎo)入的js和css,下面通過本文給大家詳細(xì)介紹需要引入的文件,對(duì)bootstrap table 表格感興趣的朋友一起看看吧2016-12-12
JavaScript實(shí)現(xiàn)模塊拖拽功能的代碼示例
這篇文章將給大家詳細(xì)介紹一下JavaScript實(shí)現(xiàn)模塊的拖拽功能的代碼示例,文中有詳細(xì)的實(shí)現(xiàn)步驟,需要的朋友可以參考下2023-07-07
nestjs實(shí)現(xiàn)圖形校驗(yàn)和單點(diǎn)登錄的示例代碼
本文主要介紹了nestjs實(shí)現(xiàn)圖形校驗(yàn)和單點(diǎn)登錄的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
理解javascript定時(shí)器中的setTimeout與setInterval
這篇文章主要幫助大家學(xué)習(xí)理解javascript定時(shí)器中的setTimeout與setInterval,從實(shí)例出發(fā)進(jìn)行深入探討,感興趣的小伙伴們可以參考一下2016-02-02
javascript內(nèi)置對(duì)象Math案例總結(jié)分析
今天總結(jié)一下javascript 內(nèi)置對(duì)象Math中的函數(shù)用法,順帶寫一下常見的案例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03

