You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jQuery点击元素获取data属性值,点击子菜单时出现异常弹窗

解决事件冒泡导致的重复弹窗问题

你猜的完全没错!这个问题就是事件冒泡搞的鬼——当你点击子元素时,点击事件会顺着DOM树往上“爬”,触发所有父元素上绑定的click事件,所以子元素的弹窗出来后,父元素的事件也跟着触发了。

给你几个实用的解决方案:

方案1:直接阻止事件冒泡

这是最直接的办法,在事件处理函数里调用e.stopPropagation(),让事件停在当前元素,不再向上传播:

$(document).on('click', ".MyLi", function (e) {
    // 阻止事件继续向上冒泡
    e.stopPropagation();
    var cont = $(this).attr('data-cont');
    alert(cont);
});

方案2:判断事件源是否为当前元素

如果你的场景里还需要保留事件冒泡(比如其他父元素要监听这个事件),可以用这个方法——只在点击的元素就是绑定事件的.MyLi本身时才执行逻辑:

$(document).on('click', ".MyLi", function (e) {
    // 检查点击的元素是否是当前.MyLi(而非子元素)
    if ($(e.target).closest('.MyLi')[0] !== this) return;
    
    var cont = $(this).attr('data-cont');
    alert(cont);
});

方案3:用return false(慎用)

return false在jQuery的事件处理中,相当于同时调用e.stopPropagation()和e.preventDefault()。如果你的元素不需要阻止默认行为(比如a标签跳转),这个方法也能用,但不如方案1精准:

$(document).on('click', ".MyLi", function (e) {
    var cont = $(this).attr('data-cont');
    alert(cont);
    return false;
});

小提示:获取data属性更优的方式

另外,jQuery里有专门的data()方法来获取data属性,它会自动转换数据类型(比如数字、布尔值),比attr()更方便:

var cont = $(this).data('cont');

内容的提问来源于stack exchange,提问作者Rooz Far

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:39:55