В вашем коде, который управляет отображением или скрытием того или иного элемента, вы должны просто использовать .toggle()
:
$("#indexpage,#imageinfo").toggle();
Тогда каждый раз, когда вызывается .toggle()
, видимый будет скрыт, а скрытый - видимым.
Предполагается, что вы уже установили в css один показ, а другой скрытый по умолчанию. Итак, CSS вашей страницы должен содержать:
#indexpage {
display: none;
}
Если это не работает для вас, и вы все еще хотите показать или скрыть одно из них в зависимости от того, виден ли другой, используйте .toggle()
, передав булевский параметр, указывающий, показывать или скрывать элемент. Получите это логическое значение, используя .is()
и :visible
.
$("#imageInfo").toggle(!$("#indexpage").is(":visible"));
Редактировать: Просто заметьте, есть несколько причин, по которым ваш пример не работает.
Во-первых, вы, похоже, пытаетесь использовать .hide()
с .css("visibility")
. Но .hide()
устанавливает display
элемента в none
. Как только это установлено, значение visibility
не будет иметь никакого эффекта. Следствием .hide()
является .show()
. Но иногда может быть предпочтительнее .toggle()
, так как он включает в себя функциональность .hide()
и .show()
. Это особенно верно, когда вы хотите показать или скрыть элемент в зависимости от определенного условия. В этом случае передайте логическое значение .toggle()
, указывающее, должен ли элемент быть видимым. Вы можете уменьшить свой код из этого:
if (checkSomeCondition()) {
$("#myElement").show();
}
else {
$("#myElement").hide();
}
Только на одну строку кода:
$("#myElement").toggle(checkSomeCondition());
Во-вторых, другая причина, по которой ваш код дает сбой, заключается в том, что вы оцениваете значение visibility
, а не присваиваете значение видимости. Оператор ==
является оператором равенства, который сравнивает два значения и возвращает логическое значение. Чтобы присвоить значение, вам нужно использовать оператор присваивания (=
):
var a = 1;
a == 2; // returns false, a is unchanged
a = 2; // now a is 2
Но вы не будете использовать оператор присваивания в этом случае, потому что вы не можете присвоить значение результату вызова функции. То есть someFunction() = 1
является недопустимым JavaScript. В jQuery для чтения значения используется один аргумент. Чтобы записать значение, вы передаете второй аргумент, указывающий новое значение:
$('#imageinfo').css('visibility', 'visible');
Это исправляет синтаксис, но из-за первой проблемы, описанной выше, это не решает вашу проблему - вам нужно установить display
вместо visibility
.