В коде, который управляет Отображение или скрытие одного элемента или другого, вы должны просто использовать .toggle()
:
$("#indexpage,#imageinfo").toggle();
Тогда каждый раз, когда .toggle()
называется, тот, который виден будет скрыт, и тот, который скрыт, будет виден.
Это предполагает, что вы уже установили, что ваш css имеет один показ, а другой скрытый по умолчанию.Таким образом, CSS вашей страницы должен содержать:
#indexpage {
display: none;
}
Если это не работает для вас, и вы все еще хотите, чтобы показать или скрыть один в зависимости от того другой видна, используйте .toggle()
пропусканием boolean, указывающий, показывать или скрывать элемент. Получите это логическое значение, используя .is()
и :visible
.
$("#imageInfo").toggle(!$("#indexpage").is(":visible"));
Edit: Просто отметить, есть несколько причин, ваш пример не работает.
Во-первых, Вы, кажется, пытаетесь использовать .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
.
Это может быть трудно, но название этого вопроса очень расплывчато. Не могли бы вы придумать лучший, чтобы другие могли извлечь выгоду из-за одной проблемы? –