点击页面其它地方隐藏该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 面向对象 继承
May 13 Javascript
关于锚点跳转及jQuery下相关操作与插件
Oct 01 Javascript
js向上无缝滚动,网站公告效果 具体代码
Nov 18 Javascript
jQuery如何取id有.的值一般的方法是取不到的
Apr 18 Javascript
JavaScript调用浏览器打印功能实例分析
Jul 17 Javascript
js强制把网址设为默认首页
Sep 29 Javascript
javascript鼠标滑过显示二级菜单特效
Nov 18 Javascript
Bootstrap基本模板的使用和理解1
Dec 14 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
Dec 17 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
Apr 20 Javascript
实例详解Node.js 函数
Jun 10 Javascript
JS实现方形抽奖效果
Aug 27 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里的JS打印函数
2006/10/09 PHP
隐藏你的.php文件的实现方法
2007/03/19 PHP
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
使用JS 清空File控件的路径值
2013/07/08 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
vue中引用阿里字体图标的方法
2018/02/10 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
2019/09/11 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
[03:42]2014DOTA2西雅图国际邀请赛7月9日TOPPLAY
2014/07/09 DOTA
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
使用python实现baidu hi自动登录的代码
2013/02/10 Python
python实现的阳历转阴历(农历)算法
2014/04/25 Python
Python编写电话薄实现增删改查功能
2016/05/07 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
Python 加密的实例详解
2017/10/09 Python
python中append实例用法总结
2019/07/30 Python
解决Django后台ManyToManyField显示成Object的问题
2019/08/09 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
python3+opencv生成不规则黑白mask实例
2020/02/19 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
公关活动策划方案
2014/05/25 职场文书
2014年服务行业工作总结
2014/11/18 职场文书
初中班主任工作随笔
2015/08/15 职场文书
Django程序的优化技巧
2021/04/29 Python