js利用事件的阻止冒泡實(shí)現(xiàn)點(diǎn)擊空白模態(tài)框的隱藏
更新時(shí)間:2014年01月24日 15:00:33 作者:
點(diǎn)擊彈出某個(gè)框框,但是,有時(shí)候不想操作,就想點(diǎn)擊某個(gè)空白處,隱藏該框框,關(guān)于這一點(diǎn),下面有個(gè)具體的實(shí)現(xiàn)
很多時(shí)候,我們做前端的時(shí)候都會(huì)有這樣的小功能,點(diǎn)擊彈出某個(gè)框框,但是,有時(shí)候不想操作,就想點(diǎn)擊某個(gè)空白處,隱藏該框框。假設(shè)如下場(chǎng)景,一個(gè)小按鈕,點(diǎn)擊可以彈出一個(gè)模態(tài)框。
就這么簡(jiǎn)單,但是我們想要點(diǎn)擊空白部分的時(shí)候隱藏模態(tài)框,加入按鈕id:btn,模態(tài)框id:model
也許我們最簡(jiǎn)單的思路就是直接在document上監(jiān)聽(tīng)一個(gè)事件,偽代碼如下:
按鈕點(diǎn)擊彈出事件監(jiān)聽(tīng):
$("#btn").bind("click",function(e){
if(e.stopPropagation){//需要阻止冒泡
e.stopPropagation();
}else{
e.cancelBubble = true;
}
})
$(document).bind("click",function(e){
if(點(diǎn)擊事件不在model上){
隱藏模態(tài)框;
}
})
乍一看,這是沒(méi)有問(wèn)題的,但是,其實(shí)有很多問(wèn)題,首先,我們得注意阻止冒泡,否則,點(diǎn)擊按鈕,實(shí)際是觸發(fā)了上面兩個(gè)事件,modal是彈不出來(lái)的,其實(shí)是彈出來(lái)了,立馬又隱藏了,而且,當(dāng)我們?cè)谀B(tài)框上還有許多小控件的時(shí)候,我們對(duì)于模態(tài)框中的點(diǎn)擊就很難進(jìn)行判斷。
這里,我認(rèn)為有一種最經(jīng)典的方法,很簡(jiǎn)單,但是很巧妙,
首先,對(duì)于模態(tài)框監(jiān)聽(tīng)一個(gè)事件如下:
$("#modal").bind("click", function(event) {
if (event && event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
});
只是簡(jiǎn)單阻止模態(tài)框中的點(diǎn)擊事件冒泡,
然后:
$(document).one("click", function(e){
var $target = $(e.currentTarget);
if ($target.attr("id") != "modal") {
$("#modal").css("display", "none");
}
});
搞定,so easy
就這么簡(jiǎn)單,但是我們想要點(diǎn)擊空白部分的時(shí)候隱藏模態(tài)框,加入按鈕id:btn,模態(tài)框id:model
也許我們最簡(jiǎn)單的思路就是直接在document上監(jiān)聽(tīng)一個(gè)事件,偽代碼如下:
按鈕點(diǎn)擊彈出事件監(jiān)聽(tīng):
復(fù)制代碼 代碼如下:
$("#btn").bind("click",function(e){
if(e.stopPropagation){//需要阻止冒泡
e.stopPropagation();
}else{
e.cancelBubble = true;
}
})
復(fù)制代碼 代碼如下:
$(document).bind("click",function(e){
if(點(diǎn)擊事件不在model上){
隱藏模態(tài)框;
}
})
乍一看,這是沒(méi)有問(wèn)題的,但是,其實(shí)有很多問(wèn)題,首先,我們得注意阻止冒泡,否則,點(diǎn)擊按鈕,實(shí)際是觸發(fā)了上面兩個(gè)事件,modal是彈不出來(lái)的,其實(shí)是彈出來(lái)了,立馬又隱藏了,而且,當(dāng)我們?cè)谀B(tài)框上還有許多小控件的時(shí)候,我們對(duì)于模態(tài)框中的點(diǎn)擊就很難進(jìn)行判斷。
這里,我認(rèn)為有一種最經(jīng)典的方法,很簡(jiǎn)單,但是很巧妙,
首先,對(duì)于模態(tài)框監(jiān)聽(tīng)一個(gè)事件如下:
復(fù)制代碼 代碼如下:
$("#modal").bind("click", function(event) {
if (event && event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
});
只是簡(jiǎn)單阻止模態(tài)框中的點(diǎn)擊事件冒泡,
然后:
復(fù)制代碼 代碼如下:
$(document).one("click", function(e){
var $target = $(e.currentTarget);
if ($target.attr("id") != "modal") {
$("#modal").css("display", "none");
}
});
搞定,so easy
您可能感興趣的文章:
- AngularJs 彈出模態(tài)框(model)
- JS實(shí)現(xiàn)圖片點(diǎn)擊后出現(xiàn)模態(tài)框效果
- js實(shí)現(xiàn)簡(jiǎn)單模態(tài)框?qū)嵗?/a>
- Vue.js彈出模態(tài)框組件開(kāi)發(fā)的示例代碼
- angularJS模態(tài)框$modal實(shí)例代碼
- AngularJS中使用ngModal模態(tài)框?qū)嵗?/a>
- bootstrap Validator 模態(tài)框、jsp、表單驗(yàn)證 Ajax提交功能
- AngularJS模態(tài)框模板ngDialog的使用詳解
- 原生js實(shí)現(xiàn)簡(jiǎn)單的模態(tài)框示例
- JavaScript+CSS實(shí)現(xiàn)模態(tài)框效果
相關(guān)文章
js中如何復(fù)制一個(gè)對(duì)象并獲取其所有屬性和屬性對(duì)應(yīng)的值
如果知道這個(gè)對(duì)象的所有屬性自然就可以重新new一個(gè),然后對(duì)每個(gè)屬性賦值,就可以做到,但如果不知道呢?如何創(chuàng)建一個(gè)內(nèi)容相同 的對(duì)象呢?下面有個(gè)不錯(cuò)的示例,大家可以看看2013-10-10JS實(shí)現(xiàn)canvas仿ps橡皮擦刮卡效果詳解
這篇文章主要為大家詳細(xì)介紹了使用js中的Canvas實(shí)現(xiàn)橡皮擦效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11Highcharts 多個(gè)Y軸動(dòng)態(tài)刷新數(shù)據(jù)的實(shí)現(xiàn)代碼
下面小編就為大家?guī)?lái)一篇Highcharts 多個(gè)Y軸動(dòng)態(tài)刷新數(shù)據(jù)的實(shí)現(xiàn)代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05ES6使用 Array.includes 處理多重條件用法實(shí)例分析
這篇文章主要介紹了ES6使用 Array.includes 處理多重條件用法,結(jié)合實(shí)例形式分析了Array.includes基本功能、原理及處理多重條件相關(guān)操作技巧,需要的朋友可以參考下2020-03-03Javascript 顏色漸變效果的實(shí)現(xiàn)代碼
在搭建博主博客的時(shí)候,尋思著做一些效果,看到菜單,就想是不是可以做一下顏色的漸變,增加一點(diǎn)動(dòng)態(tài)的感覺(jué)。有個(gè)jquery的插件,效果相當(dāng)不錯(cuò),不過(guò)博主還是打算自立更生寫(xiě)一下,看看能不能實(shí)現(xiàn)2013-10-10