ECOS百科全书|高级搜索|RSS订阅|加入收藏|服务中心|联系我们欢迎您光临!

判断当前事件对象和阻止冒泡的方法

来源:未知 发布时间:2017-10-31 10:28 字体:【   点击

在前端工程师在做网页效果时经常会用到点击事件,比如点击一个按钮弹出一个窗口,我用完了想关掉,为了体验度更好我们会做点击除弹窗以外的任意地方关闭这个窗口。

<body>
	<div class="container" id="container">
		<div class="box" id="box">
			这是一个大盒子
		</div>
	</div>
	<script>
		document.onclick=function(event){
			box.style.display="none";
		}
	</script>
</body>

这样写好像跟我们的目标不太符合,点击窗口也被关闭了,所以我用到了事件对象

document.onclick=function(event){
    var event=event||window.event;//event 表示当前的事件 在低版本上有兼容问题所以需要这样写
    var targetID=event.target?event.target.id:event.srcElement.id;//event.target 获取当前事件的对象 好东西都不兼容,所以需要这样写才兼容
    if(targetID!="box"){
     box.style.display="none";
	}
}

这样差不多好像可以了,但是我们工作中一个窗口里不可能是空的,如果里面有内容,点击到内容窗口还是会被隐藏所以又有下面的解决办法

	<div class="container" id="container">
		<div class="box" id="box">
			这是一个大盒子
			<div class="box2"></div>
		</div>
	</div>
	<script>
		var box=document.getElementById("box");
		box.onclick=function(event){
		        var event=event||window.event;
			if(event&&event.stopPropagation){
	                        event.stopPropagation(); //标准浏览器
                        }
                        else{
	                        event.cancelBubble=true; //ie678
                        }
		}
		document.onclick=function(event){
			box.style.display="none";
		}
	</script>

这样的方法我们满足了我们的需求,这里我们用到了新的知识,阻止冒泡

什么是冒泡?

在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。

所以我们的思路是给document和窗口都绑定一个点击事件,点击窗口时不做操作阻止冒泡防止触发父元素的事件

if(event&&event.stopPropagation){
	event.stopPropagation(); //标准浏览器
}
else{
	event.cancelBubble=true; //ie678
}

阻止冒泡的方法需要这样写才能兼容低版本浏览器。

------分隔线--------

关键词:JavaScript,事件对象,阻止冒泡

转载请保留:http://www.hnqss.cn/html/jszx/article-2772.html

------分隔线--------
尚未注册畅言帐号,请到后台注册