2009-08-28 1 views
14

При использовании метода sliderToggle выражение :visible никогда не возвращает ничего, кроме true.slideToggle и: visible

Если я вручную использую show/hide в сочетании с выражением :visible, это будет работать отлично.

Пример недостаточность:

jQuery(".fileNode .nodeExpander").click(function() { 
    var notes = jQuery(this).parent().siblings(".fileNotes"); 
    notes.slideToggle ("fast"); 

    var isVisible = notes.is(":visible"); // Always returns true... 

    // Do stuff based on visibility... 
}); 

Пример работает:

jQuery(".fileNode .nodeExpander").click(function() { 
    var notes = jQuery(this).parent().siblings(".fileNotes"); 
    var isVisible = notes.is(":visible"); 

    if (isVisible) 
     notes.hide("fast"); 
    else 
     notes.show("fast"); 

    // Do stuff based on visibility... 
}); 

Некоторые HTML:

<ul> 
    <li class="fileNode"> 
     <img src="<%= Url.Content ("~/Images/Collapse.png") %>" alt="<%= UIResources.CollpaseAltText %>" class="nodeExpander" /> 
    </li> 
    <li class="fileLink"> 
     <%= Html.ActionLink (file.Name, "Details", new { id = file.FileId }) %> 
    </li> 
    <li class="fileNotes"> 
     <%= file.Description %> 
    </li> 
</ul> 

Я предполагаю, что slideToggle не делать a show/hide - есть ли что-то еще, что я могу проверить?

Я пробовал в Firefox 3.5, IE 7, 8 и Chrome 4 ... все с одинаковыми результатами.

Спасибо, K

ответ

27

Ваш первый (нерабочим) фрагмент кода будет испытывать :visible в то время как slideToggle является середине перехода (точнее, он проверяет его только после того, как начинается переход.) Независимо от того, будете ли вы» повторное открытие или закрытие, состояние среднего перехода будет :visible - так что вы всегда получаете true.

проверки .is(":visible") перед вызовом slideToggle

+3

Конечно! Спасибо, теперь чувствуем себя как muppet - вызывая var isVisible =! Notes.is («: visible»); перед движением slideToggle я получаю ответ. Спасибо! – Kieron

+0

Это немного противоречиво, но имеет смысл. Если только у нас есть внутренний слайд-статус для объекта jQuery ... –

2

Попробуйте добавить обработчик Try.

notes.slideToggle ("fast", function() { 
    var isVisible = notes.is(":visible"); 
});