2015-02-26 4 views
1

Ниже приведен фрагмент кода, предназначенный для отображения комментариев определенного потока, который выбран.Команда slideUp игнорируется, но работает в консоли?

$('.comments-count').click(function(){ 
    if(!commentsDown){ 
     $(this).parent().parent().siblings('.comments').stop().slideDown(); 
     commentsDown = true; 
     currentlyDown = $(this).parent().parent().siblings('.comments'); 
    }else{ 
     $(currentlyDown).stop().slideUp(); 
     var newDown = $(this).parent().parent().siblings('.comments'); 
     if(newDown != currentlyDown){ 
      $(this).parent().parent().siblings('.comments').stop().slideDown(); 
      commentsDown = true; 
      currentlyDown = $(this).parent().parent().siblings('.comments'); 
     }else{ 
      commentsDown = false; 
      currentlyDown = null; 
     } 
    } 
}) 

$(currentlyDown).stop().slideUp(); Линия работает, если вы разместите его в консоли, но по какой-то причине он игнорируется в этом сценарии. Я ввел команды console.log() и показал, что он определенно должен выполнить его.

commentsDown и nowDown являются глобальными переменными, изначально установленными как false, так и null соответственно.

's JSFiddle. В настоящее время потоки представляют собой статический HTML. Как вы можете видеть, если вы открываете поток, а затем открываете другой, он отлично работает, но он не работает, чтобы закрыть поток.

+0

Может быть сценарием выполняется до того, как ваши комментарии будут загружены. – Gael

+0

Я добавил JSFiddle, чтобы помочь объяснить это. – TheBritishBloke

ответ

2

Вы должны быть в состоянии уменьшить весь ваш блок кода:

$(document).ready(function() { 
    $('.comments-count').click(function() { 
     $('.comments-count').not($(this)).parent().parent().siblings('.comments').stop().slideUp(); 
     $(this).parent().parent().siblings('.comments').stop().slideToggle(); 
    }) 

    //Log colour pattern 
    $('div.event-log-entry:even').addClass('evens'); 
    $('div.event-log-entry:even .comments-count').addClass('evens'); 
}) 

jsFiddle example

+0

В качестве дополнительной заметки вы также можете заменить '.parent(). Parent()' на. .closest ('div.event-log-entry-wrap') ', если хотите. – j08691

+1

Мне действительно нужно перестать пытаться работать над проектами в 1 утра, теперь это настолько ослепительно очевидно. Большое спасибо, j08691! – TheBritishBloke

-1

Добавьте свою функцию в теги document.ready;

$(document).ready(function() { 
//insert your code here 
}); 

Для получения дополнительной информации. перейти на этом сайте: http://learn.jquery.com/using-jquery-core/document-ready/

Надеется, что это помогает :)

+2

Если вы посмотрите на JSFiddle, это уже в функции document.ready. – TheBritishBloke

+1

Не видел ваш JS Fiddle, мой интернет слишком медленный. Сожалею. Я думаю, для этого вам нужно использовать slideToggle. Я всегда использую аккордеоны, и я просто использую slideToggle. Благодарю. – spongecode

Смежные вопросы