阻止子元素的点击事件

问题描述:
今天在调试页面的时候遇到一个奇怪的现象,在一个父元素上面定义了一个点击事件,在父元素下面是一个一个的li标签,这上面没有任何点击事件。现象是当点击其中一个li标签时会发生一些动作。

这个问题困惑了我好久,我对代码翻了好几遍,最后才确定是,点击子元素时也将会触发父元素的事件。当时我把这种现象是在父元素上定义点击事件时,实际上是在这个区域中都定义了点击事件,所以当点击子元素时,实际上也是在点击父元素。

但是更科学的解释是:如果在点击子元素时,如果子元素中没有点击事件,那么该点击事件将自动冒泡到父元素,直到能找到一个可以处理点击事件的函数。

那这种解释可以带来的好处是,可以有方法来屏蔽这种现象,那就是阻止点击事件的冒泡。对于jQuery而言,就是stopPropagation().对于下面的代码而言,大家可以尝试下,如果没有stopPropagation和有stopPropagation之间的差别。

代码如下:

<!DOCTYPE html>
<html>
<meta http-equiv="content-type" content="text/html;charset=utf8">
<link rel="stylesheet" type="text/css" href="">
<script src="./jQuery/jquery-2.1.4.js"></script>
<script type="text/javascript">
    $(function() {
        $("#maindiv").click(function(event) {
            if($(this).children('ul').css("display") == "none")
                $(this).children('ul').css("display","block");
            else
                $(this).children('ul').css('display',"none");
        }); 
        //阻止向上冒泡
        $("#maindiv > ul").click(function(event) {
            event.stopPropagation();
        });
    });
</script>
<title>测试如何屏蔽子元素的事件</title>
<body>
    <div id="maindiv">
        <button>click me</button>
        <ul style="display:none">
            <li>first</li>
            <li>second</li>
            <li>third</li>
        </ul>
    </div>
</body>
</html>
阻止子元素事件冒泡,可以使用CSS的pointer-events属性。将子元素的pointer-events属性设置为none,可以使子元素无法触发事件,并将事件传递给父元素。这样就可以实现阻止子元素冒泡的效果。具体代码如下所示: ``` 子元素的CSS样式: 子元素选择器 { pointer-events: none; } ``` 将上述代码中的"子元素选择器"替换为你要阻止冒泡的子元素的选择器,可以是类名、ID、标签名等。这样,当点击子元素时,事件将不会触发,并且会传递给父元素。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [阻止子元素继承父元素事件具体思路及实现](https://download.youkuaiyun.com/download/weixin_38726255/13612941)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [七夕音乐贺卡,适用与各种节日,python和前端html与css](https://download.youkuaiyun.com/download/weixin_72543266/88240845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值