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设置FieldSet展开与收缩
May 15 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
Mar 13 Javascript
js中split和replace的用法实例
Feb 28 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
May 03 Javascript
JavaScript实战(原生range和自定义特效)简单实例
Aug 21 Javascript
JS刷新父窗口的几种方式小结(推荐)
Nov 09 Javascript
angular和BootStrap3实现购物车功能
Jan 25 Javascript
js实现仿购物车加减效果
Mar 01 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
Sep 19 Javascript
vue-router的钩子函数用法实例分析
Oct 26 Javascript
微信小程序开发摇一摇功能
Nov 22 Javascript
React 高阶组件HOC用法归纳
Jun 13 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
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
2014/06/22 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
2015/05/12 PHP
图文详解PHP环境搭建教程
2016/07/16 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
Javascript MD4
2006/12/20 Javascript
this[] 指的是什么内容 讨论
2007/03/24 Javascript
javascript高亮效果的二种实现方法
2008/09/14 Javascript
给Function做的OOP扩展
2009/05/07 Javascript
在模板页面的js使用办法
2010/04/01 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
浅谈Javascript中Object与Function对象
2015/09/26 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
2016/12/06 Javascript
基于BootstrapValidator的Form表单验证(24)
2016/12/12 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
微信web端后退强制刷新功能的实现代码
2018/03/04 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
小程序中的箭头函数的具体使用
2020/06/19 Javascript
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
python获得一个月有多少天的方法
2015/06/04 Python
Python探索之Metaclass初步了解
2017/10/28 Python
python3实现磁盘空间监控
2018/06/21 Python
利用python修改json文件的value方法
2018/12/31 Python
wxPython实现列表增删改查功能
2019/11/19 Python
Python函数式编程指南:对生成器全面讲解
2019/11/19 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
高考考python编程是真的吗
2020/07/20 Python
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
2014年个人债务授权委托书范本
2014/09/22 职场文书
自主招生学校推荐信
2014/09/26 职场文书
自我推荐信格式模板
2015/03/24 职场文书
2015年学校财务工作总结
2015/05/19 职场文书
CSS3常见动画的实现方式
2021/04/14 HTML / CSS
Redis全局ID生成器的实现
2022/06/05 Redis