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 相关文章推荐
学习ExtJS Window常用方法
Oct 07 Javascript
JS中的public和private对象,即static修饰符
Jan 18 Javascript
仿新浪微博登陆邮箱提示效果的js代码
Aug 02 Javascript
jquery 淡入淡出效果的简单实现
Feb 07 Javascript
javascript实现数字+字母验证码的简单实例
Feb 10 Javascript
js中函数声明与函数表达式
Jun 03 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
Jun 19 Javascript
jQuery实现QQ空间汉字转拼音功能示例
Jul 10 jQuery
Node.js中使用mongoose操作mongodb数据库的方法
Sep 12 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
Aug 27 Javascript
JS实现简单省市二级联动
Nov 27 Javascript
VUE中V-IF条件判断改变元素的样式操作
Aug 09 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
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
PHP 危险函数解释 分析
2009/04/22 PHP
ecshop 订单确认中显示省市地址信息的方法
2010/03/15 PHP
解析php DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
微信公众号开发之语音消息识别php代码
2016/08/08 PHP
PHP微商城开源代码实例
2019/03/27 PHP
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
javascript表单验证和Window详解
2014/12/11 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
jQuery版本升级踩坑大全
2016/01/12 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
JavaScript实现各种排序的代码详解
2017/08/28 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
vue监听对象及对象属性问题
2018/08/20 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
2019/07/16 jQuery
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
Python matplotlib绘制饼状图功能示例
2019/09/10 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
如何在存储过程中使用Loop
2016/01/05 面试题
营业员演讲稿
2013/12/30 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
2014班子成员自我剖析材料思想汇报
2014/10/01 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书
探讨Java中的深浅拷贝问题
2021/06/26 Java/Android