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字母大小写转换的4个函数详解
May 09 Javascript
JavaScript实现给按钮加上双重动作的方法
Aug 14 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
Aug 28 Javascript
详解JavaScript节流函数中的Throttle
Jul 16 Javascript
关于js函数解释(包括内嵌,对象等)
Nov 20 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
Jan 05 Javascript
JavaScript中清空数组的三种方式
Mar 22 Javascript
JavaScript算法教程之sku(库存量单位)详解
Jun 29 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
Jul 03 Javascript
Angular实现预加载延迟模块的示例
Oct 12 Javascript
使用JQuery自动完成插件Auto Complete详解
Jun 18 jQuery
Angular利用HTTP POST下载流文件的步骤记录
Jul 26 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实现读取一个1G的文件大小
2013/08/24 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
使用js如何实现全选与全不选
2013/12/30 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
详解vue express启动数据服务
2017/07/05 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
JavaScript设计模式之策略模式实现原理详解
2020/05/29 Javascript
详解如何使用React Hooks请求数据并渲染
2020/10/18 Javascript
Python中itertools模块用法详解
2014/09/25 Python
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
2020/04/17 Python
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
正隆泰信息技术有限公司上机题
2012/06/14 面试题
师说教学反思
2014/02/07 职场文书
民主生活会批评与自我批评总结
2014/10/17 职场文书
旷课检讨书范文
2015/01/27 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书