一个大div里面包裹一个小div,里面的小div的点击事件不触发外面的这个大div的点击事件
2017-08-03 11:26 改吧 阅读(11800) 评论(2) 编辑 收藏 举报一开始上html代码
<div id="div1" style="background: blue;width: 100px; height: 100px;"> <div id="div2" style="background: red;width: 70px; height: 70px;"> </div> </div>
就是这样的一段代码,
大的div==>div1
小的div==>div2
当代码是
$('#div1').click(function(e) { alert('div1'); }) $('#div2').click(function(e) { alert('div2'); })
正常这样写点击代码,当点击在div2上这个区域,会触发到div1的点击事件,就是会先弹出div2-->div1
但是我想要的效果只是想点击div2区域时,只弹出div2
那现在这里有两种方案,还有的请欢迎补充
第一种,因为是冒泡了,所以阻止冒泡
$('#div1').click(function(e) { alert('div1'); }) $('#div2').click(function(e) { e.stopPropagation() alert('div2'); })
这样的话,点击div2区域只会弹出div2
点击div1只会弹出div1
第二种,因为div2覆盖在div1里面,所以不管你点击那个地方,都是触发了div1的区域,所以当点击的时候,判断这个区域是不是div2的区域,如果是的话,就触发div2,如果不是的话就触发div1
$('#div1').click(function(e){ // e.preventDefault(); if($(e.target).is('#div2')){ alert('div2') }else{ alert('div1') } })
好了 我试过的就是这两种方案,欢迎大家指教补充
现在还有一种情况,就是如果是两个div外面还有一个a标签的话,想点击大的div的时候跳转链接,点击小的div的话还是执行其他操作的话
html结构代码如下
<a href='http://www.baidu.com'> <div id="div1" style="background: blue;width: 100px; height: 100px;"> <div id="div2" style="background: red;width: 70px; height: 70px;"> </div> </div> </a>
现在的效果是想点击div2的时候执行一个事件,点击div1的时候跳转链接
这样的话可以有两种方案
第一种:阻止默认事件也就是a标签跳转
$('#div2').click(function(e) { alert('div2'); event.preventDefault(); })
第二种:return
$('#div2').click(function(e) { alert('div2'); return false; })