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中字符串替换函数replace()方法与c# 、vb 替换有一点不同
Jun 25 Javascript
Javascript快速排序算法详解
Dec 03 Javascript
javascript 兼容各个浏览器的事件
Feb 04 Javascript
浅谈$(document)和$(window)的区别
Jul 15 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
Jul 10 Javascript
js利用appendChild对标签进行排序的实现方法
Oct 16 Javascript
javaScript语法总结
Nov 25 Javascript
vue中axios处理http发送请求的示例(Post和get)
Oct 13 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
Sep 06 Javascript
微信小程序蓝牙连接小票打印机实例代码详解
Jun 03 Javascript
在vue中根据光标的显示与消失实现下拉列表
Sep 29 Javascript
layui实现数据表格自定义数据项
Oct 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文件
2007/01/04 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
PHP5.3与5.5废弃与过期函数整理汇总
2014/07/10 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
Javascript里使用Dom操作Xml
2006/09/20 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
微信小程序开发之入门实例教程篇
2017/03/07 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
2019/03/13 Javascript
vue实现列表滚动的过渡动画
2020/06/29 Javascript
[02:53]DOTA2英雄昆卡基础教程
2013/11/25 DOTA
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
[03:54]DOTA2英雄梦之声_第06期_昆卡
2014/06/23 DOTA
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
解决python运行启动报错问题
2020/06/01 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
python如何快速拼接字符串
2020/10/28 Python
python如何利用paramiko执行服务器命令
2020/11/07 Python
python之随机数函数的实现示例
2020/12/30 Python
Melissa香港官网:MDreams
2016/07/01 全球购物
精油和天然健康美容产品:Art Naturals
2018/01/27 全球购物
ECHT官方网站:男女健身服
2020/02/14 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
网络技术专业求职信
2014/05/02 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
带刀到教室的检讨书
2014/10/04 职场文书
晚会闭幕词
2015/01/28 职场文书
电影建国大业观后感
2015/06/01 职场文书
oracle数据库去除重复数据
2022/05/20 Oracle