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 相关文章推荐
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
Jun 30 Javascript
Extjs4 GridPanel 的几种样式使用介绍
Apr 18 Javascript
详解Webwork中Action 调用的方法
Feb 02 Javascript
AngularJs页面筛选标签小功能
Aug 01 Javascript
Javascript 闭包详解及实例代码
Nov 30 Javascript
jQuery延迟执行的实现方法
Dec 21 Javascript
loading动画特效小结
Jan 22 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
Mar 30 Javascript
vue2.0结合Element实现select动态控制input禁用实例
May 12 Javascript
JavaScript JSON使用原理及注意事项
Jul 30 Javascript
何时使用Map来代替普通的JS对象
Apr 29 Javascript
JavaScript事件的委托(代理)的用法示例详解
Feb 18 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你的验证码安全码?
2007/01/02 PHP
PHP生成随机用户名和密码的实现代码
2013/02/27 PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
2013/06/27 PHP
PHP实现取得HTTP请求的原文
2014/08/18 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
JScript的条件编译
2007/05/29 Javascript
js实现的网页颜色代码表全集
2007/07/17 Javascript
CSS和JS标签style属性对照表(方便js开发的朋友)
2010/11/11 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
微信小程序分享海报生成的实现方法
2018/12/10 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
Vue项目中使用WebUploader实现文件上传的方法
2019/07/21 Javascript
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
2019/11/21 Javascript
图文详解WinPE下安装Python
2016/05/17 Python
python中join()方法介绍
2018/10/11 Python
Python学习笔记之lambda表达式用法详解
2019/08/08 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
python如何求100以内的素数
2020/05/27 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
先进班级集体事迹材料
2014/01/30 职场文书
抗洪抢险事迹材料
2014/05/06 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
工作表现证明
2015/06/15 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
如何利用pygame实现打飞机小游戏
2021/05/30 Python
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers