Javascript 仅使用jQuery将return false添加到父链接

Javascript 仅使用jQuery将return false添加到父链接,javascript,jquery,html,Javascript,Jquery,Html,我在一个切换的分区中有一个列表 <li> <a href="#">Link</a> <ul stlye="display:none;"> <li><a href="http://www.google.com">Child Link</a></li> </ul> </li> 假设您所显示的内容位于ul内部,而ul又位于具有类存档的元素内部

我在一个切换的分区中有一个列表

<li>
    <a href="#">Link</a>
    <ul stlye="display:none;">
        <li><a href="http://www.google.com">Child Link</a></li>
    </ul>
</li>

假设您所显示的内容位于ul内部,而ul又位于具有类存档的元素内部,那么selector.archives ul li a将匹配父锚点和子锚点,因为您使用了子代选择器,因此会为子级调用处理程序,返回false;阻止它在链接后执行其默认操作

如果您的目标是只为早期链接而不是子链接触发处理程序,那么您可能需要更具体一些。不过,您没有向我们展示足够的标记,我们无法帮助您更加具体。如果我假设您的标记如下所示:

<div class="archives">
  <ul>
    <li>
      <a href="#">Link</a>
      <ul style="display:none;">
          <li><a href="http://www.google.com">Child Link</a></li>
      </ul>
  </li>
  </ul>
</div>
…然后,仅匹配链接锚而不匹配子链接锚的选择器将是.archives>ul>li>a,例如,使用直接子选择器


还要注意的是,您使用的是stlye而不是样式,但我认为这只是问题中的一个输入错误。为什么人们不使用复制粘贴

样式拼写错误

stlye=
从你的文章标题来看,你似乎想要这样的东西

$('.archives ul li a').click(function(){
    var $children = $(this).parent().find('ul');
    $children.slideToggle();
    return $children.length > 0 ? false : true;
});

只有在找到子ul时,Return才会为false。

子链接也由选择器匹配,并且在单击处理程序中,您正在阻止默认操作,该操作将导航到Google

因此,您应该调整选择器以仅获取切换链接,或者使用以下选项:

$('.archives ul li a').click(function(e){
    if ($(this).siblings('ul').slideToggle().length) // if we found a list to toggle
        e.preventDefault(); // or return false
}); 
由于return-false语句正在取消默认链接操作,因此您需要更加具体,以便不针对希望允许继续运行的链接

试试这个:

$('.archives > li > a').click(function () {
    $(this).parent().find('ul').slideToggle();
    return false;
});

通过使用>子选择器并将目标更改为仅最外层列表的直接子链接,子链接将不会被选中,并将继续工作。在您的代码中,您的$'.archives ul li a'将应用于任何子链接,而不仅仅是顶级链接。

在这里似乎工作正常:。您使用的是哪个版本的jQuery,代码中是否有更改?抱歉@j08691,问题是如果子链接指向url,它不再点击,切换后或切换前后都不起作用?@Liam:不清楚a您希望发生什么,B发生了什么。你能清楚地说明这些东西是什么吗?你能给我们看看html标记,包括.archives吗?此外,您似乎希望使用.nextul或.siblingsul,而不是查找所有级别上的所有列表。投票结果是什么?来吧,谁的笨蛋胆小鬼认为这是错误的?
$('.archives > li > a').click(function () {
    $(this).parent().find('ul').slideToggle();
    return false;
});