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 相关文章推荐
javascript encodeURI和encodeURIComponent的比较
Apr 03 Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
Apr 27 Javascript
用jQuery模拟select下拉框的简单示例代码
Jan 26 Javascript
JS获取元素多层嵌套思路详解
May 16 Javascript
JavaScript常用判断写法大全(推荐)
May 30 Javascript
JS修改地址栏参数实例代码
Jun 14 Javascript
微信小程序 wxapp画布 canvas详细介绍
Oct 31 Javascript
js的OOP继承实现(必看篇)
Feb 18 Javascript
redux中间件之redux-thunk的具体使用
Apr 17 Javascript
vue 优化CDN加速的方法示例
Sep 19 Javascript
小程序实现多个选项卡切换
Jun 19 Javascript
Jquery使用each函数实现遍历及数组处理
Jul 14 jQuery
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中使用灵巧的体系结构
2006/10/09 PHP
使用 php4 加速 web 传输
2006/10/09 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
php ZipArchive实现多文件打包下载实例
2019/10/31 PHP
js停止输出代码
2008/07/20 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
javascript中的五种基本数据类型
2015/08/26 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
Angular工具方法学习
2016/12/26 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
2019/05/07 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
2019/06/19 Javascript
javascript实现简单搜索功能
2020/03/26 Javascript
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
对numpy中shape的深入理解
2018/06/15 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
python中对数据进行各种排序的方法
2019/07/02 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
pytorch获取模型某一层参数名及参数值方式
2019/12/30 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
网络工程师个人的自我评价范文
2013/10/01 职场文书
坚定理想信念心得体会
2014/03/11 职场文书
大学英语专业求职信
2014/06/21 职场文书
月度优秀员工获奖感言
2014/08/16 职场文书
优秀共产党员演讲稿
2014/09/04 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
2015年推普周活动总结
2015/03/27 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
Python re.sub 反向引用的实现
2021/07/07 Python
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS
Django框架之路由用法
2022/06/10 Python