处理DIV元素嵌套情况下的事件响应

DIV元素在嵌套情况下响应事件时会发生重叠,比如下例:

点击DIV0时只会响应DIV0的事件处理,但点击DIV1时会先响应DIV1事件,然后又响应DIV0事件。

这通常是不符合我们的要求的。

怎么解决呢?

<html >
<body>

<div id="DIV0" style="background:blue;width:500px;height:100px;" align="center"
	οnclick="clickDiv0(this);">
	<div id="DIV1" style=" left:0px;background:yellow;width:100px;height:100px;;" align="center"
	οnclick="clickDiv1(this);">
	</div>
</div>
<script type="text/javascript">
function clickDiv0(obj){
	alert("id:"+obj.id);
	obj.style.background="red";
}

function clickDiv1(obj){
	alert("id:"+obj.id);
	obj.style.background="green";
}
</script>

</body>
</html>


 

解决办法:

首先分析事件响应重叠的原因:因为元素重叠,这时内层DIV1的点击动作同时会触发外层DIV0的点击事件。

因此我们可以只给DIV0设置事件响应,然后判断实际触发的位置是在DIV0还是DIV1,再做相应的处理。

修改后的代码如下:

<html >
<body>

<div id="DIV0" style="background:blue;width:500px;height:100px;" align="center"
	οnclick="">
	<div id="DIV1" style=" left:0px;background:yellow;width:100px;height:100px;;" align="center"
	οnclick="">
	</div>
</div>
<script type="text/javascript">
//document.getElementById("DIV0").οnclick=function(e){
onTagclick=function(e){
	e=e||window.event;
	var tag = e.target || e.srcElement;  
	//tag就是当前被点击的元素,下面可对tag做任何通用操作
	//alert("id:"+tag.id);
	//对不同元素做不同操作,需预先设置元素id
	if (tag.id=="DIV0"){clickDiv0(tag);} //<--执行你想要的代码
	if (tag.id=="DIV1"){clickDiv1(tag);} //<--执行你想要的代码
}; 
document.getElementById("DIV0").οnclick=onTagclick;  //***只给DIV0事件响应赋值

function clickDiv0(obj){
	alert("id:"+obj.id);
	obj.style.background="red";
}

function clickDiv1(obj){
	alert("id:"+obj.id);
	obj.style.background="green";
}
</script>

</body>
</html>


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值