Как определить текущее состояние jQuery toggle ()

4

Я показываю и скрываю divs, когда нажимает другой div. Мне нужно определить, отображается ли какой-либо конкретный div или отображается или скрыто.

В конечном итоге то, что я пытаюсь сделать, - это то, что при нажатии на какой-то div все остальные "show/hide" div должны быть скрыты, а затем определять, отображается ли div div, связанный с clicked-div, если это скрыть его, иначе покажите это.

Мне также нужно добавить/удалить класс css (для цвета фона) для показанного/скрытого div на основе его состояния переключения.

Здесь код jQuery, который я использую для переключения состояния show/hide divs:

$('#movieListTable').on('click', 'div.vitalsTable', function (e) {

    // Don't do anything if the Edit button or Delete checkbox is clicked
    if (event.target.className !== 'btnEditMovie' && event.target.className !== 'chkDeleteMovie') {

        $(this).parent().parent().find('div.detailsTable').toggle('blind','easeInOutQuart', 300);
    }
});

Странно - и разочаровывает - все, что я прочитал, включая ответы здесь в SO, указывает, что я должен просто проверить состояние отображения ( "нет" ) или видимое свойство, но проверить консоль ни одна из них не устанавливается на div, который отображается/скрыт.

Я создал jsFiddle, чтобы вы могли общаться.

Документация jQuery для toggle() обсуждает примерно 3/4 пути вниз по странице, логический параметр "showOrHide" для одного о способах использования toggle(), но я не смог выяснить, как использовать это сам...

  • 0
    Возможный дубликат состояния jQuery Toggle
Теги:
toggle

4 ответа

10
Лучший ответ

вы можете использовать $(div).is(':visible')

  • 0
    Нет - попробовал это в моем коде с помощью if $ (div) .is (': visible') {console.log ('visible')} else {console.log ('not visible')}, и он всегда печатает "not visible "в консоли.
  • 0
    Вы заменили div на селектор для dom, который вы проверяете?
Показать ещё 8 комментариев
1
$('.elem').slideToggle('fast', function() {
    alert($(this).is(':visible'));
});
  • 1
    Поясните свой ответ
0

if ( $(el).css('display') === 'none) ) it toggled off else it toggled on

0
var className = $(el).attr("class"); 

Можно извлечь текущий класс оттуда по логике, может взять на себя испытание и изменить элемент:

  • if(className == "yourCss")
  • el.addClass("YourCSS");
  • el.removeClass("YourCSS");

Я все еще верю, что jvnill answer эффективен, если не нужно проверять несколько случаев класса.

toggle(): просто переключитесь между hide() и show() для выбранных элементов, изменив свойство отображения CSS.

Примечание.. Когда класс добавляется к элементу, атрибут класса (список) элемента добавляется вместе с ним, если он не удаляется вызовом .removeClass().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню