2014-12-23 4 views
2

Привет Я использую jQuery слайд-переключатель на двух вложенных ul, однако, когда я нажимаю на вторичную ul, другая ul не продвигается вверх.jQuery slideToggle, slide up другие элементы

Как я могу получить jQuery для обнаружения правильного и сдвинуть его вверх?

У меня есть jsFiddle как пример того, что я делаю. Любые предложения относительно того, что я могу сделать по-другому?

Пример кода:

<ul class="top-category four columns"> 
    <li class="filter-title">Filter by: Blog Categories <span class="icon-arrow-down3"></span> 

     <ul class="child-category"> 
      <li class="filter-item"> 
       <input type="checkbox" id="tag_278" name="blog_categories[]" class="fintech siteset-checkbox" value="FinTech" data-name="FinTech">FinTech</li> 
     </ul> 
    </li> 
</ul> 
<ul class="top-category four columns"> 
    <li class="filter-title">Filter by: Staff <span class="icon-arrow-down3"></span> 

     <ul class="child-category"> 
      <li class="filter-item"> 
       <input type="checkbox" id="tag_283" name="staff[]" class="jan_stannard siteset-checkbox" value="Jan Stannard" data-name="Jan Stannard">Jan Stannard</li> 
     </ul> 
    </li> 
</ul> 

JQuery

$(".filter-title").click(function() { 
     $(this).children().nextAll('.child-category').slideToggle(); 
    }); 

CSS

.child-category {display:none} 
+0

Я полагаю, что это хорошо работает. –

ответ

1

Попробуйте это:

$(".filter-title").click(function() { 
    var child = $(this).children('.child-category') , 
     rest = $('.child-category:visible').not(child); 

    child.slideToggle(); //toggle current one 
    rest.slideUp(); //close the rest 

}); 

Fiddle

+0

В чем причина правильного ответа? –

+0

его не идеально работает, infact вместо того, чтобы использовать nextAll, вы изменили на первый. вы явно не тестировали, если бы вы видели, что он работает точно так же, как мой пример. – 001221

+0

Ваш пример не работает. Если вы переключите первую категорию и нажмете на второй заголовок, первая категория будет скрыта. .nextВсе используется неправильно в вашем примере. Мой пример работает так, как вы можете проверить на скрипте, которую я связал. Я использовал .first() только по соображениям производительности. Вы можете опустить его, если хотите. –

0

Try с этим:

$(".filter-title").click(function() { 
    $('.child-category:visible').stop(true, true).slideToggle(); // <---add this line 
    $(this).find('.child-category').stop(true, true).slideToggle(); 
}); 
+0

если я нажму заголовок фильтра дважды, то он выйдет из-под контроля – 001221

+0

вы можете добавить '.stop (true, true)' before' .slideToggle(); ' – Jai

+0

nope все тот же. http://jsfiddle.net/y2rktyn1/1/ – 001221