javascript - 防止默认但激活链接

标签 javascript jquery

在我的导航菜单中,我有一个想要使用的下拉菜单。实际的下拉菜单很好,我已经使用 preventDefault(); 阻止了自动冒泡,但现在下拉菜单中的所有链接都不再起作用。

如何才能使下拉菜单正常工作,不冒泡并且下拉菜单中的所有链接都正常工作?

编辑:我也使用了 event.stopPropagation() 也没有效果。这是怎么回事?!

这是我的代码:

// Toggle dropdowns
$('.menu-item-has-children').click(function(e){
    e.preventDefault();
    $(this).find('.sub-menu').toggleClass('open');
});

最佳答案

要停止冒泡,请使用 event.stopPropagation() .

仅使用event.preventDefault()以防止事件的默认操作发生。

<小时/>

啊,现在我明白你的问题了。问题是,当单击菜单项打开子菜单时,由于该项目是指向 # 的 anchor ,文档将滚动到顶部。

为了避免这种情况,我建议删除 href="#"

或者,仅当单击的元素是该元素而不是后代元素时,您才可以使用 preventDefault:

$('.menu-item-has-children').on('click', function(e){
    if(this == e.target) e.stopPropagation();
    // ...
});

Demo

关于javascript - 防止默认但激活链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24876643/

相关文章:

javascript - Angular 1.6 中可能未处理的拒绝

javascript - 如何以编程方式检查特定元素的 CSS 样式?

javascript - 我如何在 Reactjs 应用程序上安装 LESS css?

javascript - 无法将 jinja2 变量传递到 javascript 代码段中

javascript - 如何针对倒数第二个 child 的 child ?

javascript - 拖放三 Angular 形

javascript - 无法将值传递给 PHP 变量

javascript - Bootstrap : hide links on navbar collapse

javascript - 如果表单字段为空,则在 blur() 之后将类更改回正常

php - Symfony2 重新提交表单时转发