点击页面其它地方隐藏该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 showModalDialog模态对话框使用说明
Dec 31 Javascript
JQuery跨Iframe选择实现代码
Aug 19 Javascript
jQuery图片预加载 等比缩放实现代码
Oct 04 Javascript
整理JavaScript创建对象的八种方法
Nov 03 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
Feb 15 Javascript
javascript css红色经典选项卡效果实现代码
May 17 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
Oct 26 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
Dec 30 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
Jan 08 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
May 08 Javascript
webstrom Debug 调试vue项目的方法步骤
Jul 17 Javascript
解决百度Echarts图表坐标轴越界的方法
Oct 17 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打造属于自己的MVC框架
2012/03/07 PHP
php url路由入门实例
2014/04/23 PHP
PHP中file_put_contents追加和换行的实现方法
2017/04/01 PHP
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
jquery+json实现数据列表分页示例代码
2013/11/15 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
js实现日历的简单算法
2017/01/24 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
2018/12/03 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
泛谈JS逻辑判断选择器 || &amp;&amp;
2019/05/24 Javascript
基于vue写一个全局Message组件的实现
2019/08/15 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
openlayers4.6.5实现距离量测和面积量测
2020/09/25 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
Python计算字符宽度的方法
2016/06/14 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
pymysql模块的操作实例
2019/12/17 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
Python matplotlib可视化实例解析
2020/06/01 Python
美国五金商店:Ace Hardware
2018/03/27 全球购物
考试不及格检讨书
2014/01/09 职场文书
仓库管理制度
2014/01/21 职场文书
应用英语专业自荐信
2014/01/26 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
公司合并协议书范本
2014/09/30 职场文书
语文教师个人工作总结
2015/02/06 职场文书
财务统计员岗位职责
2015/04/14 职场文书
Jupyter notebook 更改文件打开的默认路径操作
2021/05/21 Python
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript