点击页面其它地方隐藏该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 相关文章推荐
在JavaScript中遭遇级联表达式陷阱
Mar 08 Javascript
JS 常用校验函数
Mar 26 Javascript
JQuery中使用Ajax赋值给全局变量异常的解决方法
Jan 10 Javascript
javascript中的事件代理初探
Mar 08 Javascript
js四舍五入数学函数round使用实例
May 09 Javascript
JS实现跟随鼠标闪烁转动色块的方法
Feb 26 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
Jul 25 Javascript
详解JS-- 浮点数运算处理
Nov 28 Javascript
vue-router 权限控制的示例代码
Sep 21 Javascript
vue-router配合ElementUI实现导航的实例
Feb 11 Javascript
微信小程序整合使用富文本编辑器的方法详解
Apr 25 Javascript
JS绘图Flot应用图形绘制异常解决方案
Oct 16 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桌面中心(四) 数据显示
2007/03/11 PHP
PHP使用数组实现队列
2012/02/05 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
jquery DOM操作 基于命令改变页面
2010/05/06 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
使用Javascript简单实现图片无缝滚动
2014/12/05 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
node.js实现端口转发
2016/04/14 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
浅析python中的分片与截断序列
2016/08/09 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
python批量创建指定名称的文件夹
2019/03/21 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
python flask搭建web应用教程
2019/11/19 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
校园标语大全
2014/06/19 职场文书
民政工作个人总结
2015/02/28 职场文书
感动中国何玥观后感
2015/06/02 职场文书
《艾尔登法环》Boss腐烂树灵很有可能是《黑暗之魂3》的一个废案
2022/04/11 其他游戏