slideToggle и: видимый - PullRequest
       17

slideToggle и: видимый

15 голосов
/ 28 августа 2009

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

Если я вручную использую 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 не делает show / hide - есть что-то еще, что я могу проверить?

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

Спасибо, K

Ответы [ 2 ]

29 голосов
/ 28 августа 2009

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

Попробуйте проверить .is(":visible") перед звонком slideToggle

4 голосов
/ 28 августа 2009

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

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