js利用事件的阻止冒泡实现点击空白模态框的隐藏


Posted in Javascript onJanuary 24, 2014

很多时候,我们做前端的时候都会有这样的小功能,点击弹出某个框框,但是,有时候不想操作,就想点击某个空白处,隐藏该框框。假设如下场景,一个小按钮,点击可以弹出一个模态框。

就这么简单,但是我们想要点击空白部分的时候隐藏模态框,加入按钮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
Javascript 相关文章推荐
父子窗体间传递JSON格式的数据的代码
Dec 25 Javascript
javascript使用isNaN()函数判断变量是否为数字
Sep 21 Javascript
吐槽一下我所了解的Node.js
Oct 08 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
Oct 23 Javascript
基于Javascript实现文件实时加载进度的方法
Oct 12 Javascript
简单的js计算器实现
Oct 26 Javascript
创建简单的node服务器实例(分享)
Jun 23 Javascript
vue-router 手势滑动触发返回功能
Sep 30 Javascript
echarts多条折线图动态分层的实现方法
May 24 Javascript
JavaScript实现五子棋小游戏
Oct 26 Javascript
Vue+penlayers实现多边形绘制及展示
Dec 24 Vue.js
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 Vue.js
JS实现点击链接取消跳转效果的方法
Jan 24 #Javascript
js关于字符长度限制的问题示例探讨
Jan 24 #Javascript
JS方法调用括号的问题探讨
Jan 24 #Javascript
Array栈方法和队列方法的特点说明
Jan 24 #Javascript
js sort 二维数组排序的用法小结
Jan 24 #Javascript
js二维数组排序的简单示例代码
Jan 24 #Javascript
js中数组(Array)的排序(sort)注意事项说明
Jan 24 #Javascript
You might like
php后退一页表单内容保存实现方法
2012/06/17 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
php使用curl下载指定大小的文件实例代码
2017/09/30 PHP
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
jquery html动态生成select标签出问题的解决方法
2013/11/20 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
js时间日期格式化封装函数
2014/12/02 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
学习JavaScript设计模式之享元模式
2016/01/18 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
Angular 4.x 动态创建表单实例
2017/04/25 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
用JS实现根据当前时间随机生成流水号或者订单号
2018/05/31 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
2020/09/04 Javascript
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
python实现挑选出来100以内的质数
2015/03/24 Python
Python中使用gzip模块压缩文件的简单教程
2015/04/08 Python
Python中关于字符串对象的一些基础知识
2015/04/08 Python
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
mac下如何将python2.7改为python3
2018/07/13 Python
Django REST framework视图的用法
2019/01/16 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
了解AppleShare protocol(AppleShare协议)吗
2015/08/28 面试题
给女朋友的道歉信
2014/01/10 职场文书
学年末自我鉴定
2014/01/21 职场文书
《盘古开天地》教学反思
2014/02/28 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
体育教师教学随笔
2015/08/15 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书
Go gorilla securecookie库的安装使用详解
2022/08/14 Golang