点击页面其它地方隐藏该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 相关文章推荐
style、 currentStyle、 runtimeStyle区别分析
Aug 01 Javascript
javascript中String类的subString()方法和slice()方法
May 24 Javascript
JavaScript判断一个URL链接是否有效的实现方法
Oct 08 Javascript
JS图片无缝、平滑滚动代码
Mar 11 Javascript
JavaScript中获取鼠标位置相关属性总结
Oct 11 Javascript
原生js实现移动端瀑布流式代码示例
Dec 18 Javascript
JS获取当前脚本文件的绝对路径
Mar 02 Javascript
几种tab切换详解
Feb 03 Javascript
基于angular实现三级联动的生日插件
May 12 Javascript
es6函数之严格模式用法实例分析
Mar 17 Javascript
关于javascript中的promise的用法和注意事项(推荐)
Jan 15 Javascript
JavaScript实现页面动态验证码的实现示例
Mar 23 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
根德Grundig S400/S500/S700电路分析
2021/03/02 无线电
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
PHP实现获取并生成数据库字典的方法
2016/05/04 PHP
PHP正则表达式入门教程(推荐)
2016/05/18 PHP
提高网站信任度的技巧
2008/10/17 Javascript
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
jQuery中用dom操作替代正则表达式
2014/12/29 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
详解vue 中使用 AJAX获取数据的方法
2017/01/18 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
2018/06/28 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
javascript中正则表达式语法详解
2020/08/07 Javascript
[09:23]国际邀请赛采访专栏:iG战队VK,Tongfu战队Cu
2013/08/05 DOTA
[07:37]DOTA2-DPC中国联赛2月2日Recap集锦
2021/03/11 DOTA
python算法学习之桶排序算法实例(分块排序)
2013/12/18 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
详解Python中contextlib上下文管理模块的用法
2016/06/28 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
2016/07/11 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
python 搜索大文件的实例代码
2019/07/08 Python
python常用数据重复项处理方法
2019/11/22 Python
python selenium操作cookie的实现
2020/03/18 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
CSS3 渐变(Gradients)之CSS3 线性渐变
2016/07/08 HTML / CSS
Harrods英国:世界领先的奢侈品百货商店
2020/09/23 全球购物
《孔子拜师》教学反思
2014/02/24 职场文书
腾讯广告词
2014/03/19 职场文书
小学教师评语大全
2014/04/23 职场文书
2014年收银工作总结
2014/11/13 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
Nginx中break与last的区别详析
2021/03/31 Servers
springboot+VUE实现登录注册
2021/05/27 Vue.js