点击页面其它地方隐藏该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 相关文章推荐
用脚本调用样式的几种方法
Dec 09 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
Jan 03 Javascript
js实现动态改变字体大小代码
Jan 02 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
Mar 03 Javascript
JS实现的数组去除重复数据算法小结
Nov 17 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
Nov 28 Javascript
微信小程序数字滚动插件使用详解
Feb 02 Javascript
vue树形结构获取键值的方法示例
Jun 21 Javascript
vue实现多级菜单效果
Oct 19 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
Jun 01 Javascript
js实现购物车商品数量加减
Sep 21 Javascript
vue 导航守卫和axios拦截器有哪些区别
Dec 19 Vue.js
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
农民和部队如何穿矿
2020/03/04 星际争霸
同时提取多条新闻中的文本一例
2006/10/09 PHP
其他功能
2006/10/09 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
PHP查询分页的实现代码
2017/06/09 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
跟随鼠标旋转的文字
2006/11/30 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
javascript闭包入门示例
2014/04/30 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
2014/07/18 Javascript
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
2016/11/03 Javascript
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
Python属性和内建属性实例解析
2020/01/14 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
Python如何读写二进制数组数据
2020/08/01 Python
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
怎样从/向数据文件读/写结构
2014/11/23 面试题
一份软件工程师的面试试题
2016/02/01 面试题
既然说Ruby中一切都是对象,那么Ruby中类也是对象吗
2013/01/26 面试题
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
护士思想汇报
2014/01/12 职场文书
英语专业职业生涯规划范文
2014/03/05 职场文书
七匹狼男装广告词
2014/03/21 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
日语专业毕业生自荐书
2014/06/18 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
2015小学毕业班工作总结
2015/07/21 职场文书
Python基础之进程详解
2021/05/21 Python
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL