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 相关文章推荐
网页中的图片的处理方法与代码
Nov 26 Javascript
用JQUERY增删元素的代码
Feb 14 Javascript
JS代码同步文本框内容的实例方法
Jul 12 Javascript
JavaScript禁止页面操作的示例代码
Dec 17 Javascript
微信JS接口汇总及使用详解
Jan 09 Javascript
基于JS实现的倒计时程序实例
Jul 24 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
Aug 06 Javascript
JavaScript数组方法总结分析
May 06 Javascript
vue.js做一个简单的编辑菜谱功能
May 08 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
Jun 01 Javascript
vue+springboot+element+vue-resource实现文件上传教程
Oct 21 Javascript
使用vue构建多页面应用的示例
Oct 22 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
windows下升级PHP到5.3.3的过程及注意事项
2010/10/12 PHP
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
2014/11/24 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
通过jquery实现tab标签浏览效果
2007/02/20 Javascript
js jquery验证银行卡号信息正则学习
2013/01/21 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
express的中间件cookieParser详解
2014/12/04 Javascript
JS实现进入页面时渐变背景色的方法
2015/02/25 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
Vue单页式应用(Hash模式下)实现微信分享的实例
2017/07/21 Javascript
Vue中之nextTick函数源码分析详解
2017/10/17 Javascript
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
python字符串替换示例
2014/04/24 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
python文本数据处理学习笔记详解
2019/06/17 Python
Python Lambda函数使用总结详解
2019/12/11 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
HTML5仿微信聊天界面、微信朋友圈实例代码
2018/01/29 HTML / CSS
业务助理岗位职责
2013/11/18 职场文书
《中国的气候》教学反思
2014/02/23 职场文书
营销团队口号
2014/06/06 职场文书
行政经理岗位职责
2015/04/15 职场文书
nginx共享内存的机制详解
2022/03/21 Servers
golang实现浏览器导出excel文件功能
2022/03/25 Golang