点击页面其它地方隐藏该div的两种思路


Posted in Javascript onNovember 18, 2013

思路一

第一种思路分两步

第一步:对document的click事件绑定事件处理程序,使其隐藏该div

第二步:对div的click事件绑定事件处理程序,阻止事件冒泡,防止其冒泡到document,而调用document的onclick方法隐藏了该div。

<script type="text/javascript"> 
function stopPropagation(e) { 
if (e.stopPropagation) 
e.stopPropagation(); 
else 
e.cancelBubble = true; 
} $(document).bind('click',function(){ 
$('#test').css('display','none'); 
}); 
$('#test').bind('click',function(e){ 
stopPropagation(e); 
}); 
</script>

这样当点击页面非div区域的时候,直接或层层冒泡会调用document的onclick方法,隐藏该div,而点击div或其子元素的时候,事件总会冒泡的div本身,这时候会阻止事件继续冒泡,不会调用doument的onclick方法致使div被隐藏,从而完成了我们的需求。

思路二

我们之前提到,在触发DOM上的某个事件的时候会产生一个事件对象event,这个对象包含着所有与事件有关的信息,包括产生事件的元素、事件类型等相关信息,思路一中div的click事件处理程序传入的参数就是这个event对象。访问IE中的event对象有几种不同的方式,取决于指定事件处理程序的方法。直接为DOM元素添加事件处理程序时,event对象作为window对象的一个属性存在。

event对象包含了一个重要属性:target(W3C)/srcElement(IE),这个属性标识了触发事件的原始元素,思路二就是要利用这个属性。我们可以直接对document的click事件绑定事件处理程序,在事件处理程序中判读事件源是否为id==test的div元素或其子元素,如果是则方法return不做操作,如果不是则隐藏该div。

<script type="text/javascript"> 
$(document).bind('click',function(e){ 
var e = e || window.event; //浏览器兼容性 
var elem = e.target || e.srcElement; 
while (elem) { //循环判断至跟节点,防止点击的是div子元素 
if (elem.id && elem.id=='test') { 
return; 
} 
elem = elem.parentNode; 
} $('#test').css('display','none'); //点击的不是div或其子元素 
}); 
</script>

这样当点击页面任何地方的时候都会层层冒泡至document的click事件,事件处理程序会判断事件源是否为id==test的div或其子元素,如果是方法return,否则隐藏该div,也能够实现我们的需求。
Javascript 相关文章推荐
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
Jun 27 Javascript
jQuery搜索子元素的方法
Feb 10 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
Mar 23 Javascript
JavaScript将数字转换成大写中文的方法
Mar 23 Javascript
JavaScript实现上下浮动的窗口效果代码
Oct 12 Javascript
js实现倒计时效果(小于10补零)
Mar 08 Javascript
javascript 中Cookie读、写与删除操作
Mar 29 Javascript
解决VUEX刷新的时候出现数据消失
Jul 03 Javascript
使用Node.js实现ORM的一种思路详解(图文)
Oct 24 Javascript
浅谈ElementUI中switch回调函数change的参数问题
Aug 24 Javascript
vue.js仿hover效果的实现方法示例
Jan 28 Javascript
浅谈JS的原型和原型链
Jun 04 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
Nov 18 #Javascript
Jquery取得iframe下内容的方法
Nov 18 #Javascript
JavaScript实现的日期控件具体代码
Nov 18 #Javascript
js获取当前月的第一天和最后一天的小例子
Nov 18 #Javascript
js向上无缝滚动,网站公告效果 具体代码
Nov 18 #Javascript
js call方法详细介绍(js 的继承)
Nov 18 #Javascript
jQuery操作Select的Option上下移动及移除添加等等
Nov 18 #Javascript
You might like
Could not load type System.ServiceModel.Activation.HttpModule解决办法
2012/12/29 PHP
ThinkPHP3.1.3版本新特性概述
2014/06/19 PHP
学习php设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
php生成word并下载代码实例
2019/03/15 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
jquery tools之tooltip
2009/07/25 Javascript
jQuery EasyUI API 中文文档 - Tabs标签页/选项卡
2011/10/01 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
js控制input输入字符解析
2013/12/27 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
JavaScript监听和禁用浏览器回车事件实例
2015/01/31 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
2016/08/17 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
2017/03/03 Javascript
深入理解vue2.0路由如何配置问题
2017/07/18 Javascript
jQuery代码优化方法总结
2018/01/29 jQuery
详解js访问对象的属性和方法
2018/10/25 Javascript
JavaScript链式调用实例浅析
2018/12/19 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
[39:21]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.24
2019/09/10 DOTA
Python脚本实现集群检测和管理功能
2015/03/06 Python
python实现Decorator模式实例代码
2018/02/09 Python
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
深入分析python 排序
2020/08/24 Python
python中常用的数据结构介绍
2021/01/12 Python
大学生专业个人学习的自我评价
2013/10/26 职场文书
质量承诺书怎么写
2014/05/24 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
悬崖上的金鱼姬观后感
2015/06/15 职场文书