js利用事件的阻止冒泡實現(xiàn)點擊空白模態(tài)框的隱藏
更新時間:2014年01月24日 15:00:33 作者:
點擊彈出某個框框,但是,有時候不想操作,就想點擊某個空白處,隱藏該框框,關(guān)于這一點,下面有個具體的實現(xiàn)
很多時候,我們做前端的時候都會有這樣的小功能,點擊彈出某個框框,但是,有時候不想操作,就想點擊某個空白處,隱藏該框框。假設(shè)如下場景,一個小按鈕,點擊可以彈出一個模態(tài)框。
就這么簡單,但是我們想要點擊空白部分的時候隱藏模態(tài)框,加入按鈕id:btn,模態(tài)框id:model
也許我們最簡單的思路就是直接在document上監(jiān)聽一個事件,偽代碼如下:
按鈕點擊彈出事件監(jiān)聽:
$("#btn").bind("click",function(e){
if(e.stopPropagation){//需要阻止冒泡
e.stopPropagation();
}else{
e.cancelBubble = true;
}
})
$(document).bind("click",function(e){
if(點擊事件不在model上){
隱藏模態(tài)框;
}
})
乍一看,這是沒有問題的,但是,其實有很多問題,首先,我們得注意阻止冒泡,否則,點擊按鈕,實際是觸發(fā)了上面兩個事件,modal是彈不出來的,其實是彈出來了,立馬又隱藏了,而且,當我們在模態(tài)框上還有許多小控件的時候,我們對于模態(tài)框中的點擊就很難進行判斷。
這里,我認為有一種最經(jīng)典的方法,很簡單,但是很巧妙,
首先,對于模態(tài)框監(jiān)聽一個事件如下:
$("#modal").bind("click", function(event) {
if (event && event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
});
只是簡單阻止模態(tài)框中的點擊事件冒泡,
然后:
$(document).one("click", function(e){
var $target = $(e.currentTarget);
if ($target.attr("id") != "modal") {
$("#modal").css("display", "none");
}
});
搞定,so easy
就這么簡單,但是我們想要點擊空白部分的時候隱藏模態(tài)框,加入按鈕id:btn,模態(tài)框id:model
也許我們最簡單的思路就是直接在document上監(jiān)聽一個事件,偽代碼如下:
按鈕點擊彈出事件監(jiān)聽:
復制代碼 代碼如下:
$("#btn").bind("click",function(e){
if(e.stopPropagation){//需要阻止冒泡
e.stopPropagation();
}else{
e.cancelBubble = true;
}
})
復制代碼 代碼如下:
$(document).bind("click",function(e){
if(點擊事件不在model上){
隱藏模態(tài)框;
}
})
乍一看,這是沒有問題的,但是,其實有很多問題,首先,我們得注意阻止冒泡,否則,點擊按鈕,實際是觸發(fā)了上面兩個事件,modal是彈不出來的,其實是彈出來了,立馬又隱藏了,而且,當我們在模態(tài)框上還有許多小控件的時候,我們對于模態(tài)框中的點擊就很難進行判斷。
這里,我認為有一種最經(jīng)典的方法,很簡單,但是很巧妙,
首先,對于模態(tài)框監(jiān)聽一個事件如下:
復制代碼 代碼如下:
$("#modal").bind("click", function(event) {
if (event && event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
});
只是簡單阻止模態(tài)框中的點擊事件冒泡,
然后:
復制代碼 代碼如下:
$(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實現(xiàn)圖片點擊后出現(xiàn)模態(tài)框效果
- js實現(xiàn)簡單模態(tài)框?qū)嵗?/a>
- Vue.js彈出模態(tài)框組件開發(fā)的示例代碼
- angularJS模態(tài)框$modal實例代碼
- AngularJS中使用ngModal模態(tài)框?qū)嵗?/a>
- bootstrap Validator 模態(tài)框、jsp、表單驗證 Ajax提交功能
- AngularJS模態(tài)框模板ngDialog的使用詳解
- 原生js實現(xiàn)簡單的模態(tài)框示例
- JavaScript+CSS實現(xiàn)模態(tài)框效果
相關(guān)文章
JS在onclientclick里如何控制onclick的執(zhí)行
這篇文章主要介紹了JS在onclientclick里如何控制onclick的執(zhí)行的相關(guān)資料,需要的朋友可以參考下2016-05-05
js實現(xiàn)完美兼容各大瀏覽器的人民幣大小寫相互轉(zhuǎn)換
在基于網(wǎng)頁的打印輸出或報表中,經(jīng)常會牽扯到金額的大寫,每次都打上去很麻煩,所以想法用一個JavaScript客戶端腳本來實現(xiàn)自動轉(zhuǎn)換,只需在需要顯示大寫金額的時候調(diào)用該JS函數(shù),下面我們就來匯總下吧2015-10-10
ECharts餅圖顏色設(shè)置的4種方式總結(jié)
這篇文章主要給大家介紹了關(guān)于ECharts餅圖顏色設(shè)置的4種方式,ECharts餅圖的顏色可以通過多種方式進行設(shè)置,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-09-09
在JavaScript中使用嚴格模式(Strict Mode)
這篇文章主要介紹了在JavaScript中使用嚴格模式(Strict Mode),除了正常運行模式,ECMAscript 5添加了第二種運行模式:"嚴格模式"(strict mode)。顧名思義,這種模式使得Javascript在更嚴格的條件下運行。,需要的朋友可以參考下2019-06-06

