Вернуть false только для первого ul (исключить дочерние ссылки) в навигации с помощью jQuery

В настоящее время я работаю над навигацией и столкнулся с некоторыми проблемами. Он имеет фиксированную навигацию с меню SlideToggle для дочерних элементов навигации. Мне нужно, чтобы «li» с классом «parent» возвращал false, чтобы он не перескакивал обратно в верхнюю часть страницы при нажатии. Однако когда я это делаю, все дочерние ссылки отключаются. Можно ли просто настроить таргетинг на самого родителя и вернуть только одно ложное?

HTML:

<nav>
 <ul>
  <li><a href="#"></a></li>
  <li class="parent">
    <a href="#"></a>
    <ul>
      <li><a href="#"></a></li>
      <li><a href="#"></a></li>
    </ul>
  </li>
  <li><a href="#"></a></li>
 </ul>
</nav>

JS:

$("li.parent").click(function(){
   $(this).children("ul").slideToggle(300);
   return false;
});

person souporserious    schedule 07.01.2013    source источник
comment
api.jquery.com/first   -  person algorhythm    schedule 08.01.2013
comment
Исправьте свой код. У вас есть открытые теги и элементы li за пределами ul. Либо опубликуйте свой полный код. И не ставьте навигацию или другие неизвестные элементы.   -  person Jimmy Kane    schedule 08.01.2013
comment
@JimmyKane, это не неизвестно html5-webdesign.de/nav.html   -  person algorhythm    schedule 08.01.2013
comment
Да ты прав @algorhythm. Извините, я не в полной мере осведомлен обо всех нововведениях html5.   -  person Jimmy Kane    schedule 08.01.2013
comment
используйте 'javascript: void ();' вместо '#' для hrefs, потому что ссылка '#' может создать проблемы с ajax по отношению к ipad ;-)   -  person algorhythm    schedule 08.01.2013
comment
Я до сих пор точно не знаю, в чем проблема. Я попытался создать jsfiddle, чтобы воссоздать проблему jsfiddle.net/qF6Gf, но я не знаю, где идти оттуда. Я удалил теги <a></a>, так как вы можете просто щелкнуть прямо на div, чтобы показать / скрыть подменю. Вы хотите сказать, что теги <a></a> вызывают перезагрузку страницы? В этом случае метод алгоритма должен работать imo.   -  person Zack    schedule 08.01.2013
comment
Извините за опечатки, они исправлены. Вы можете увидеть меню здесь: beta.revival.tv Проблема в том, что вы прокручиваете страницу вниз и щелкните по нему, он вернется наверх перед загрузкой страницы. Если я верну его false, ссылки просто свернут меню.   -  person souporserious    schedule 08.01.2013


Ответы (2)


попробуйте использовать eq(0), чтобы сопоставить только первое вхождение <ul>s

$("li.parent").click(function(){
    $(this).children("ul").eq(0).slideToggle(300);
    return false;
});
person bukart    schedule 07.01.2013
comment
Я пробовал это безуспешно. Если вы нажмете на ссылки этого ul, они все равно вернут false. Мне просто нужно вернуть ul как false. - person souporserious; 08.01.2013

Итак, я нашел решение, используя оператор and if и .preventDefault ()

Следующий код - это то, что у меня получилось

$("li.parent").click(function(e){
  if($(this).children("ul").is(':hidden')) {
      e.preventDefault();
  };
  $(this).children("ul").first().slideToggle(300);
});
person souporserious    schedule 07.01.2013