jQuery .toggle (showOrHide) не работает

0

Я хочу использовать функцию.toggle(showOrHide) для проверки состояния. В документации api это упоминается как;

$( "#foo" ).toggle( showOrHide );
if ( showOrHide === true ) {
    $( "#foo" ).show();
} else if ( showOrHide === false ) {
    $( "#foo" ).hide();
}

Но это не работает. Кто-нибудь знает, как заставить его работать? Я хочу проверить статус, показать или скрыть его.

  • 1
    какова стоимость showOrHide ?
  • 0
    Я получил нулевое значение. Я инициализировал переменную "showOrHide", но она ничего не возвращает.
Показать ещё 1 комментарий
Теги:

8 ответов

2

Согласно документам: http://api.jquery.com/toggle/

Вторая версия метода принимает логический параметр. Если этот параметр равен true, то отображаются согласованные элементы; если false, элементы скрыты. По существу, утверждение:

Вам нужно объявить true или false;

var showOrHide = true;

if ( showOrHide === true ) {
    $( "#foo" ).show();
} else if ( showOrHide === false ) {
    $( "#foo" ).hide();
}

Использование сокращений будет иметь смысл в большинстве случаев, но, похоже, у ОП есть требование сначала проверить статус.

1

Это ответ основывается на моем вопросе:

Как оценить, что-то отображается или скрыто?

Этот вопрос вытекает из вашего комментария к другому ответу:

... Я хочу проверить, что статус переключения отображается или скрывается.

Вы не понимаете, что такое toggle(Boolean); если вы передадите логическое значение, которое оценивает значение true (или иначе "правдиво"), тогда он покажет элемент, иначе значение false (или "falsey") скроет элементы (элементы), на которые был вызван toggle().

Чтобы узнать, отображается ли элемент, вы должны сами оценить логическое значение (с учетом значений правды/ложных значений):

var isShown = showOrHide ? "Yes, it shown" : "No, it hidden";

Или, более строго:

var isShown = showOrHide === true ? "Yes, it shown" : "No, it hidden";

Вы также можете использовать jQuery .is(':visible') который возвращает логическое значение, описывающее, является ли элемент, по которому он вызван, видимым для пользователя (true) или скрытым (false):

var isShown = $('#element').is(':visible');

Очень простой случай, иллюстрирующий использование .is('visible'):

$('#toggleControl').on('change', function(){
    $('#demo').toggle(this.checked);
    $('#status').text(function(){
        return $('#demo').is(':visible') ? 'Shown' : 'Hidden';
    });
}).change();

Демо-версия JS Fiddle.

И, аналогично, демоверсия самого булева:

$('#toggleControl').on('change', function(){
    var checkbox = this;
    $('#demo').toggle(checkbox.checked);
    $('#status').text(function(){
        return checkbox.checked ? 'Shown' : 'Hidden';
    });
}).change();

Демо-версия JS Fiddle.

Обе демо работают в следующем HTML:

<input type="checkbox" id="toggleControl" /><label for="toggleControl"> element</label>
<div id="status"></div>
<div id="demo">
    <p>Can be shown or hidden, by checking, or unchecking, the checkbox.</p>
</div>

Рекомендации:

0

Это также может помочь. как альтернатива другим ответам

var showOrHide = !$( "#foo" ).is(':visible');
$( "#foo" ).toggle( showOrHide );
0

Как насчет использования переменной для проверки состояния элемента:

var isShowing = true;

$('button').click(function () {
    if (isShowing) {
        $('#foo').hide();
        isShowing = false;
    }
    else {
        $('#foo').show();
        isShowing = true;
    }
});

jsFiddle, основанный на том, что ранее опубликовал @urbz...

0

Где в документах jQuery вы нашли это? Быстрый поиск предполагает, что это способ показать или скрыть элемент, а не возвращать, видно ли элемент: http://api.jquery.com/toggle/

  • 0
    Я пробовал это, но он возвращает нулевое значение и функция переключения не работает при добавлении, как это $ ("#foo") .toggle (showOrHide);
0

Вот демонстрационная ссылка: DEMO.

Я обновляю ответ и проверяю, правильно ли он нужен.

Вот пример кода:

var showOrHide = false;
$( "button" ).click(function() {
    showOrHide = !showOrHide;
    if ( showOrHide === true ) {
        $( "#foo" ).show();
    } else if ( showOrHide === false ) {
        $( "#foo" ).hide();
    }
});
  • 0
    Я не ожидаю такого ответа. Потому что я хочу проверить состояние переключателя: показать или скрыть.
0

Учитывая элемент

Код, который вы указали, будет работать.

Создайте для него функцию:

function showOrHide(element, display) {   
    if ( display === true ) {
        $(element ).show();
    } else if ( display === false ) {
        $(element).hide();
    }
}

И назовите его foo

showOrHide($('#foo'), true);
showOrHide($('#foo'), false);
0

вы пропустили понимание api (проверьте здесь - прокрутите несколько строк, чтобы увидеть его). в api он говорит, что этот $( "#foo").toggle( showOrHide ); эквивалентно:

if ( showOrHide === true ) {
  $( "#foo" ).show();
} else if ( showOrHide === false ) {
  $( "#foo" ).hide();
}

как для его использования: вам нужно установить значение переменной "showOrHide" как "true" или "false", а затем использовать $( "#foo").toggle( showOrHide ); , когда, конечно, вам нужно изменить "#foo" на любой элемент.

как для проверки, является ли элемент видимым или скрытым - проверьте эту ссылку.

Ещё вопросы

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