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

添加类后preventDefault失效,点击span需切换图标且阻止父级a标签跳转的问题

添加类后preventDefault失效,点击span需切换图标且阻止父级a标签跳转的问题

嘿,我明白你遇到的头疼问题了!本来好好的下拉菜单逻辑,一加上激活类切换,父级的<a>标签就开始跳转了,咱们先拆解下问题出在哪:

你原来的阻止跳转逻辑是靠精确判断e.target.className=='royalonogy-mobile-menu-dropdown',但当你给span加上royalonogy-mobile-menu-dropdown-active类之后,它的className就变成了两个类的组合,精确匹配自然就失效了,没法阻止跳转了。

给你个修正后的方案,直接解决这个问题,代码也更简洁:

// 委托事件到body,处理父级a标签的跳转阻止逻辑
$('body').on('click', '.royalonogy-mobile-menu-link', function(e){
    // 改用hasClass判断,不管span有没有激活类,只要是目标元素就阻止跳转
    if($(e.target).hasClass('royalonogy-mobile-menu-dropdown')){
        e.preventDefault();
        e.stopPropagation(); // 可选,防止事件冒泡触发其他父元素逻辑
    }
});

jQuery(document).ready(function () {
    // 绑定span的点击事件,同时处理下拉切换和类切换
    jQuery("#royalonogy-mobile-menu .royalonogy-mobile-menu-item .royalonogy-mobile-menu-link .royalonogy-mobile-menu-dropdown").on('click', function () {
        var $this = jQuery(this);
        // 切换下拉菜单的显示/隐藏
        $this.parent().next('ul.royalonogy-mobile-podkategorie-menu').toggle();
        // 一键切换激活类,替代原来的if-else判断
        $this.toggleClass("royalonogy-mobile-menu-dropdown-active");
    });
});

关键改动点说明:

  • 把精确匹配className改成用hasClass判断,这样不管span有没有新增的激活类,都能正确识别是目标元素,保证阻止跳转的逻辑一直生效。
  • 用toggleClass替代手动的if-else,既减少代码量,逻辑也更直观。
  • 加上e.stopPropagation()是个保险措施,防止事件冒泡到父级a标签触发其他可能的点击事件(如果有的话)。

这样修改后,点击span的时候,既能切换图标对应的激活类,又能稳稳阻止父级a标签跳转,下拉菜单的逻辑也不受影响~

备注:内容来源于stack exchange,提问作者Martin Orešanský

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 13:28:06