点击页面其它地方隐藏该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 相关文章推荐
js浮点数精确计算(加、减、乘、除)
Dec 26 Javascript
javascript生成随机数的方法
May 16 Javascript
JavaScript中split() 使用方法汇总
Apr 17 Javascript
Bootstrap中CSS的使用方法
Feb 17 Javascript
如何在Linux上安装Node.js
Apr 01 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
Oct 17 Javascript
完美解决axios跨域请求出错的问题
Feb 05 Javascript
JavaScript反射与依赖注入实例详解
May 29 Javascript
vue 循环加载数据并获取第一条记录的方法
Sep 26 Javascript
vue实现中部导航栏布局功能
Jul 30 Javascript
在vue+element ui框架里实现lodash的debounce防抖
Nov 13 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
Aug 18 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
如何使用PHP计算上一个月的今天
2013/05/23 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
鼠标悬停小图标显示大图标
2016/01/22 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
JQuery学习总结【一】
2016/12/01 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
Nodejs实现多文件夹文件同步
2018/10/17 NodeJs
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
Python基于动态规划算法计算单词距离
2015/07/25 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
Python3.6正式版新特性预览
2016/12/15 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
python求质数列表的例子
2019/11/24 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
优衣库美国官网:UNIQLO美国
2018/04/14 全球购物
FC-Moto英国:欧洲最大的摩托车服装和头盔商店之一
2019/08/25 全球购物
生物科学系大学生的自我评价
2013/12/20 职场文书
写自荐信三大法宝
2014/01/24 职场文书
个人合作协议书范本
2014/04/18 职场文书
采购部长岗位职责
2014/06/13 职场文书
计划生育标语
2014/06/23 职场文书
超市理货员岗位职责
2014/07/04 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书
新闻报道稿范文
2015/07/23 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
HTML常用标签超详细整理
2022/03/19 HTML / CSS
Pillow图像处理库安装及使用
2022/04/12 Python