if ($("#makespan").is(":visible") == true) {
var make = $("#make").val();
}
else {
var make = $("#othermake").val();
}
Make:<span id=makespan><select id=make></select><span id=othermakebutton class=txtbutton>Other?</span></span><span id=othermakespan style="display: none;"><input type=text name=othermake id=othermake> - <span id=othermakecancel class=txtbutton>Cancel</span></span>
Приведенный выше код работает в Firefox без сбоев, но, похоже, не работает в Chrome. В Chrome это показывает .is(":visible") = false
даже когда оно есть true
.
Я использую следующую версию jQuery: jquery-1.4.3.min.js
Ссылка jsFiddle: http://jsfiddle.net/WJU2r/4/
jquery
google-chrome
Саад Башир
источник
источник
Ответы:
Кажется,
:visible
селектор jQuery не работает для некоторых встроенных элементов в Chrome. Решение состоит в том, чтобы добавить стиль отображения, как"block"
или"inline-block"
заставить его работать.Также обратите внимание, что jQuery имеет несколько иное определение того, что видно, чем многие разработчики:
Другими словами, элемент должен иметь ненулевую ширину и высоту, чтобы занимать пространство и быть видимым.
С другой стороны, даже если для него
visibility
установлено значениеhidden
или непрозрачность равна нулю, он все равно работает:visible
с jQuery, поскольку он занимает место, что может сбивать с толку, когда CSS явно говорит, что его видимость скрыта.Самый простой способ посмотреть на это, это то, что если вы видите элемент на экране, даже если вы не видите его содержимое, он прозрачный и т. Д., Он видим, то есть занимает место.
Я немного очистил вашу разметку и добавил стиль отображения ( т.е. установил отображение элементов на «block» и т. Д. ), И это работает для меня:
FIDDLE
Официальная ссылка на API для
:visible
Начиная с jQuery 3, определение
:visible
немного изменилосьисточник
Я не знаю, почему ваш код не работает на Chrome, но я предлагаю вам использовать некоторые обходные пути:
или
Если вы уверены, что JQuery дает вам некоторые плохие результаты в Chrome, вы можете просто положиться на проверку правила CSS:
Кроме того, вы можете использовать последнюю версию jQuery, потому что в ней могут быть исправлены ошибки более старой версии.
источник
:hidden
и:not(:visible)
. stackoverflow.com/questions/17425543/…Существует странный случай, когда элемент установлен в
display: inline
в jQuery, проверка на видимость завершается неудачей.Пример:
CSS
JQuery
Чтобы это исправить, можно скрыть элемент в JQuery и чем
show/hide
илиtoggle()
должны работать нормально.источник
Я предполагаю, что это как-то связано с причудой в нашем HTML, потому что другие места на той же странице работают просто отлично.
Единственный способ решить эту проблему - это сделать:
источник
Если вы читаете документы jquery, существует множество причин, по которым что-то нельзя считать видимым / скрытым:
У них есть CSS значение отображения ни одного.
Это элементы формы с type = "hidden".
Их ширина и высота явно установлены на 0.
Элемент-предок скрыт, поэтому элемент не отображается на странице.
http://api.jquery.com/visible-selector/
Вот небольшой пример jsfiddle с одним видимым и одним скрытым элементом:
http://jsfiddle.net/tNjLb/
источник
Internet Explorer, Chrome, Firefox ...
Кросс-браузерная функция "isVisible ()"
Полный пример:
С Уважением,
Фернандо
источник
Обычно я живу в такой ситуации, когда родитель моего объекта скрыт. например, когда HTML-код выглядит так:
если вы спросите, виден ли ребенок как:
он вернет false, потому что его родитель не виден, так что div также не будет виден.
источник
Решение кросс-браузер / версия, чтобы определить, является ли элемент видимым, состоит в добавлении / удалении класса css к элементу на show / hide. Состояние элемента по умолчанию (видимое) может быть, например, таким:
<span id="span1" class="visible">Span text</span>
Затем при скрытии удалите класс:
$("#span1").removeClass("visible").hide();
На шоу, добавьте это снова:
$("#span1").addClass("visible").show();
Затем, чтобы определить, является ли элемент видимым, используйте это:
if ($("#span1").hasClass("visible")) { // do something }
Это также решает проблемы с производительностью, которые могут возникнуть при интенсивном использовании селектора «: visible», которые указаны в документации jQuery:
Официальная документация по jQuery API для селектора ": visible"
источник
Я добавил следующий стиль для родителя, и .is (": visible") сработал.
источник
Если элемент является потомком скрытого элемента (": visible"), он вернет true, что неверно.
Я просто исправил это, добавив «display: наследовать» к дочернему элементу. Это будет исправлено для меня:
и CSS:
Теперь элемент можно эффективно включать и выключать, изменяя видимость родительского элемента, а $ (element) .is (": visible") будет возвращать видимость родительского элемента.
источник
Это фрагмент кода из jquery.js, который выполняется, когда вызывается (": visible"):
Как видите, он использует больше, чем просто свойство отображения CSS. Это также зависит от ширины и высоты содержимого элемента. Следовательно, убедитесь, что элемент имеет некоторую ширину и высоту. И для этого вам может потребоваться установить для свойства display значение
"inline-block"
или"block"
источник
Мне нужно использовать видимость: скрытая установка отображения: нет, потому что видимость принимает события, а отображение - нет.
Так и делаю
.attr('visibility') === "visible"
источник