js利用事件的阻止冒泡實現點擊空白模態框的隱藏_javascript技巧

來源:互聯網
上載者:User
很多時候,我們做前端的時候都會有這樣的小功能,點擊彈出某個框框,但是,有時候不想操作,就想點擊某個空白處,隱藏該框框。假設如下情境,一個小按鈕,點擊可以彈出一個模態框。

就這麼簡單,但是我們想要點擊空白部分的時候隱藏模態框,加入按鈕id:btn,模態框id:model

也許我們最簡單的思路就是直接在document上監聽一個事件,虛擬碼如下:

按鈕點擊彈出事件監聽:
複製代碼 代碼如下:

$("#btn").bind("click",function(e){
if(e.stopPropagation){//需要阻止冒泡
e.stopPropagation();
}else{
e.cancelBubble = true;
}
})

複製代碼 代碼如下:

$(document).bind("click",function(e){
if(點擊事件不在model上){
隱藏模態框;
}
})

乍一看,這是沒有問題的,但是,其實有很多問題,首先,我們得注意阻止冒泡,否則,點擊按鈕,實際是觸發了上面兩個事件,modal是彈不出來的,其實是彈出來了,立馬又隱藏了,而且,當我們在模態框上還有許多小控制項的時候,我們對於模態框中的點擊就很難進行判斷。

這裡,我認為有一種最經典的方法,很簡單,但是很巧妙,

首先,對於模態框監聽一個事件如下:
複製代碼 代碼如下:

$("#modal").bind("click", function(event) {
if (event && event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}

});

只是簡單阻止模態框中的點擊事件冒泡,

然後:
複製代碼 代碼如下:

$(document).one("click", function(e){
var $target = $(e.currentTarget);
if ($target.attr("id") != "modal") {
$("#modal").css("display", "none");
}
});

搞定,so easy

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.