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 面向对象思想 附源码
Jul 07 Javascript
javascrip客户端验证文件大小及文件类型并重置上传
Jan 12 Javascript
jquery模拟LCD 时钟的html文件源代码
Jun 16 Javascript
jQuery实现简洁的轮播图效果实例
Sep 07 Javascript
微信小程序学习(4)-系统配置app.json详解
Jan 12 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
Jan 22 Javascript
vue基于mint-ui的城市选择3级联动的示例
Oct 25 Javascript
jQuery实现动态加载select下拉列表项功能示例
May 31 jQuery
详解vue-cli下ESlint 配置说明
Sep 03 Javascript
node后端服务保活的实现
Nov 10 Javascript
Vue数字输入框组件示例代码详解
Jan 15 Javascript
Vue使用预渲染代替SSR的方法
Jul 02 Javascript
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读取富文本的时p标签会出现红线是怎么回事
2014/05/13 PHP
php生成二维码
2015/08/10 PHP
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
jQuery中insertAfter()方法用法实例
2015/01/08 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
2015/12/10 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
vue自定义指令的创建和使用方法实例分析
2018/12/04 Javascript
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
跟老齐学Python之重回函数
2014/10/10 Python
Python学习笔记之os模块使用总结
2014/11/03 Python
Python实现网站文件的全备份和差异备份
2014/11/30 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
快速了解Python开发环境Spyder
2020/06/29 Python
Python reques接口测试框架实现代码
2020/07/28 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
python/golang实现循环链表的示例代码
2020/09/14 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
为有想象力的人提供的生活方式商店:Firebox
2018/06/04 全球购物
简单的辞职信范文
2014/01/18 职场文书
高中军训第一天感言
2014/03/06 职场文书
中药学专业求职信
2014/05/31 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
教师工作表现评语
2014/12/31 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
2015年学校工作总结范文
2015/04/20 职场文书
2015年药房工作总结
2015/04/25 职场文书
加强党性修养心得体会
2016/01/21 职场文书