嵌套点击事件如何解决触发问题?

页面

DOM结构

<div style="height: 45px;">
	<div class="aaa">
		测试1
		<button type="button" class="bbb">测试2</button>
	</div>
</div>
<div style="height: 45px;">
	<div class="ccc" onclick="ccc()">
		测试3
		<button type="button" class="ddd" onclick="ddd()">测试4</button>
	</div>
</div>

JS写法

<script type="text/javascript">
	$(function() {
		//测试1
		$(".aaa").click(function(){
			alert("aaa");
		});
		//测试2
		$(".bbb").click(function(){
			alert("bbb");
		});
	});	
	//测试3
	function ccc(){
		alert("ccc");
	}
	//测试4
	function ddd(){
		alert("ddd");
	}
</script>

发现问题:

  1. 在点击测试1的时候,弹出"aaa";
  2. 在点击测试2的时候,弹出“bbb”,"aaa";
  3. 在点击测试3的时候,弹出“ccc”;
  4. 在点击测试4的时候,弹出“ddd”,“ccc”;

这样就不对了呀,我想点击测试2的时候,只弹出“bbb”,在点击测试4的时候只弹出“ddd”。

所以修改测试2和测试4的JS,增加return false;

<script type="text/javascript">
	$(function() {
		//测试1
		$(".aaa").click(function(){
			alert("aaa");
		});
		//测试2
		$(".bbb").click(function(){
			alert("bbb");
            return false;
		});
	});	
	//测试3
	function ccc(){
		alert("ccc");
	}
	//测试4
	function ddd(){
		alert("ddd");
        return false;
	}
</script>

这样修改完变成:

  1. 在点击测试1的时候,弹出"aaa";
  2. 在点击测试2的时候,弹出“bbb”;
  3. 在点击测试3的时候,弹出“ccc”;
  4. 在点击测试4的时候,弹出“ddd”,“ccc”;

这样就发生了个神奇的现象

在点击测试2的时候,满足了我的要求,但是在点击测试4的时候,还是不好使。

所以就去研究click和onclick的区别:发现onclick得换个写法

<script type="text/javascript">
	$(function() {
		//测试1
		$(".aaa").click(function(){
			alert("aaa");
		});
		//测试2
		$(".bbb").click(function(){
			alert("bbb");
            return false;
		});
	});	
	//测试3
	function ccc(){
		alert("ccc");
	}
	//测试4
	function ddd(e){
		alert("ddd");
        e.stoppropagation();
	}
</script>

所以以后再遇见嵌套点击事件

如果要使用click,直接用return false就可以了。

如果要使用onclick,需要传入e,使用e.stoppropagation()就可以了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值