Javascript 如何更改e.preventDefault()禁用子锚点链接?

Javascript 如何更改e.preventDefault()禁用子锚点链接?,javascript,jquery,html,Javascript,Jquery,Html,假设我们有如下HTML结构: <ul id="dropdown-download-links"> <li> <a href="foo.html">Foo</a> <!-- Don't want this clickable, but cannot remove it --> <ul> <li><a href="bar.html">Bar</a></li

假设我们有如下HTML结构:

<ul id="dropdown-download-links">
  <li>
    <a href="foo.html">Foo</a> <!-- Don't want this clickable, but cannot remove it -->
    <ul>
      <li><a href="bar.html">Bar</a></li>
      <li><a href="baz.html">Baz</a></li>
   </ul>
 </li>
 <li><!-- .. same style structure here .. --></li>
 <li><!-- .. same style structure here .. --></li>
</ul> 

尽管使用了
e.preventDefault()
,但有人能看到栏和Baz链接的工作方式吗?这样,原本应该是链接的原始父级就可以作为展开新链接的可单击元素了?

我相信有更好的方法可以做到这一点,但您可以尝试使用“removeAttribute”(“href”)删除href属性标签


来源:

您应该使用
子链接
方法,而不是
这对性能更有利,此代码对子链接没有影响,您确定此代码中存在问题吗

删除attr
href
的解决方案不适用于您,因为这些链接将重新加载页面

$(文档).ready(函数(){
$(“ul#下拉下载链接”)。子项('li')。子项('a')。单击(函数(e){
e、 预防默认值();
$(this).next(“ul”).slideToggle();
});
//空href attr不阻止页面重新加载
const$second=$(“ul#dropdown second”);
如果($second.length){
$second.children('li').children('a').attr('href','');
}
});

使用“预防默认”
已删除“href”属性

一个简单的CSS解决方案如何使用

//在
  • 上设置事件处理程序,而不是

  • 使用您显示的代码,Bar和Baz不会受到影响,因为它们与传递给事件注册的选择器不匹配,
    ul#下拉下载链接>li>a
    。HTML只是一个示例,我可以重新检查,但我认为选择器仍然与不起作用的子链接不匹配。我们只能根据您发布的代码提供帮助。但是现在,JS与那些Baz和Bar链接无关,所以这个问题是无效的。如果这些链接不起作用,那是因为另一个原因,如果看不到您实际的、更广泛的代码,这一点就不清楚了。最准确的代码示例是这个fiddle:当然,但是fiddle是补充性的。为了帮助你,我们有理由期待所有相关信息都出现在问题中:)这是最好的答案,也是我认为唯一一个能与我僵化的服务联邦结构相适应的答案。有一个简单的jQuery替代方法吗?这个链接总结得很好:在我看来,如果一个普通的JS方法可以胜任这项工作,那么就没有必要求助于像jQuery这样的大型库来做同样的事情,它会删除滑动儿童的点击事件我的打字错误,对不起,他想点击一个链接,但是这个CSS会禁用点击事件,这是行不通的case@IvanKaraman我想你没有读过要求。他不希望链接可以点击。看看他自己在旁边的评论。我看到了他的JSFIDLE示例,这个链接是用来打开下拉菜单的,但我喜欢你的答案,我没有想到这个CSS道具是一个解决方案…@IvanKaraman如果是这样的话,这个事件可以添加到
    li
    父级,而不是
    a
    。答案已更新。问题解决了。
    $(document).ready(function() {
      $("ul#dropdown-download-links > li > a").unbind().click(function(e) {
        e.stopPropagation();
        var ulContainer = $(this).closest("li").find("ul");
        $(ulContainer).slideToggle();
      });
    });