Скрыть / показать элемент с логическим значением


109

В моем коде их много

if(shouldElementBeVisible)
    $element.show()
else
    $element.hide()

Есть ли более элегантный способ упаковки с помощью javascript, jquery или подчеркивания? В идеале я хочу что-то вроде этого

$element.showOrHideDependingOn(shouldElementBeVisible)


@SpencerWieczorek, этот вопрос касается ссылки toggle, но это другой вопрос
Аакил Фернандес,

Ответы:


166

По-видимому, вы можете просто передать логическое значение toggleфункции

$element.toggle(shouldElementBeVisible)

34
Я рекомендую использовать, $element.toggle(!!shouldElementBeVisible)чтобы предотвратить случайное попадание в одну из других «перегрузок» , если, конечно, вы не уверены, что переменная является логическим значением.
Jeroen

8
Может быть, лучший вариант $element.toggle(shouldElementBeVisible == true).
jox

"0"и "false"обрабатываются совсем иначе, чем в falseлюбом случае, поэтому я не думаю, что это различие действительно имеет значение - даже 0было бы неверным, если бы вы хотели, чтобы оно было скрыто, поскольку все эти значения времени анимации установлены, но все же отражают видимость.
Tasgall

19

Да, есть!

$element.toggle();

Без параметров toggleпросто переключает видимость элементов (я не имею в виду visibilityсвойство) и зависит от текущего состояния элемента.

$element.toggle(display);

Если вы вызываете toggleс логическим параметром, элемент отображается, если он есть, trueи hiddenесли онfalse

источник


2
Я собирался отметить это неправильно, но потом понял, что последняя ссылка на API позволяет вам установить логическое значение вместо объекта параметров.
Аакил Фернандес,

несколько строк под этим: «Без параметров метод .toggle () просто переключает видимость элементов»
Зак Спенсер,

2
это на самом деле противоположное тому, что я хотел. Я хотел, чтобы текущее состояние элемента не имело значения. Состояние должно быть основано на логической переменной.
Аакил Фернандес

@AakilFernandes Значит, переменная isShownне имеет отношения к тому, чтобы $elementбыть видимым, или нет? Но отдельная переменная, не относящаяся к элементу?
Spencer Wieczorek

Да, извините, мне, наверное, следовало бы переименовать isShownво что-то вроде, shouldElementBeVisibleчтобы сделать это более очевидным
Аакил Фернандес


0

Функция .toggle()изменяет displayзначение элемента.

Если вы хотите изменить visibility, я бы предложил использовать ?:оператор. Для этого в вашем CSS установите видимость в исходное состояние, а в JS просто поместите:

    var checkboxChecked = $("#yourCheckbox").(":checked");

    $("#yourElement").css("visibility", checkboxChecked ? "visible" : "hidden");
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.