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>
El código anterior se ejecuta sin problemas en Firefox, pero no parece funcionar en Chrome. En Chrome se muestra .is(":visible") = false
incluso cuando es así true
.
Estoy usando la siguiente versión de jQuery: jquery-1.4.3.min.js
Enlace jsFiddle: http://jsfiddle.net/WJU2r/4/
jquery
google-chrome
Saad Bashir
fuente
fuente
Respuestas:
Parece que el
:visible
selector de jQuery no funciona para algunos elementos en línea en Chrome. La solución es agregar un estilo de visualización, como"block"
o"inline-block"
para que funcione.También tenga en cuenta que jQuery tiene una definición algo diferente de lo que es visible que muchos desarrolladores:
En otras palabras, un elemento debe tener un ancho y una altura distintos de cero para consumir espacio y ser visibles.
Por otro lado, incluso si
visibility
se establece enhidden
o la opacidad es cero, todavía:visible
es jQuery ya que consume espacio, lo que puede ser confuso cuando el CSS dice explícitamente que su visibilidad está oculta.La manera fácil de verlo es que si puede ver el elemento en la pantalla, incluso si no puede ver su contenido, es transparente, etc., es visible, es decir, ocupa espacio.
Limpié un poco su marcado y agregué un estilo de visualización ( es decir, configurar la visualización de elementos para "bloquear", etc. ), y esto funciona para mí:
VIOLÍN
Referencia oficial de API para
:visible
A partir de jQuery 3, la definición de
:visible
ha cambiado ligeramentefuente
No sé por qué su código no funciona en Chrome, pero le sugiero que use algunas soluciones:
o
Si está seguro de que jQuery le da algunos malos resultados en Chrome, puede confiar en la comprobación de reglas CSS:
Además, es posible que desee utilizar la última versión de jQuery porque puede haber corregido errores de versiones anteriores.
fuente
:hidden
y:not(:visible)
. stackoverflow.com/questions/17425543/…Hay un caso extraño en el que si el elemento se establece en
display: inline
jQuery, la comprobación de visibilidad falla.Ejemplo:
CSS
jQuery
Para solucionarlo, puede ocultar el elemento en jQuery y entonces
show/hide
otoggle()
debería funcionar bien.fuente
Supongo que tiene algo que ver con una peculiaridad en nuestro HTML porque otros lugares en la misma página funcionan bien.
La única forma en que pude resolver este problema fue hacer:
fuente
Si lee los documentos de jquery, existen numerosas razones para que algo no se considere visible / oculto:
Tienen un valor de visualización CSS de ninguno.
Son elementos de formulario con type = "hidden".
Su ancho y alto se establecen explícitamente en 0.
Un elemento ancestro está oculto, por lo que el elemento no se muestra en la página.
http://api.jquery.com/visible-selector/
Aquí hay un pequeño ejemplo de jsfiddle con un elemento visible y otro oculto:
http://jsfiddle.net/tNjLb/
fuente
Internet Explorer, Chrome, Firefox ...
Función de navegador cruzado "isVisible ()"
Ejemplo completo:
Saludos,
Fernando
fuente
En general, vivo esta situación cuando el padre de mi objeto está oculto. por ejemplo cuando el html es así:
si pregunta si el niño es visible como:
devolverá falso porque su padre no es visible, por lo que div no será visible también.
fuente
Una solución de navegador cruzado / versión para determinar si un elemento es visible, es agregar / eliminar una clase css al elemento en show / hide. El estado predeterminado (visible) del elemento podría ser, por ejemplo, así:
<span id="span1" class="visible">Span text</span>
Luego, en hide, elimina la clase:
$("#span1").removeClass("visible").hide();
En el programa, agréguelo nuevamente:
$("#span1").addClass("visible").show();
Luego, para determinar si el elemento es visible, use esto:
if ($("#span1").hasClass("visible")) { // do something }
Esto también resuelve las implicaciones de rendimiento, que pueden ocurrir en el uso intensivo del selector ": visible", que se señalan en la documentación de jQuery:
Documentación oficial de la API jQuery para el selector ": visible"
fuente
Agregué el siguiente estilo en el padre y .is (": visible") funcionó.
fuente
Si un elemento es hijo de un elemento que está oculto, es (": visible") devolverá verdadero, lo cual es incorrecto.
Acabo de arreglar esto agregando "display: heredar" al elemento secundario. Esto lo arreglará para mí:
y el CSS:
Ahora el elemento se puede activar y desactivar de manera efectiva cambiando la visibilidad del elemento primario, y $ (element) .is (": visible") devolverá la visibilidad del elemento primario
fuente
Este es el fragmento de código de jquery.js que se ejecuta cuando is (": visible") se llama:
Como puede ver, utiliza más que solo la propiedad de visualización CSS. También depende del ancho y alto del contenido del elemento. Por lo tanto, asegúrese de que el elemento tenga algo de ancho y alto. Y para hacer esto, es posible que deba establecer la propiedad de visualización en
"inline-block"
o"block"
fuente
Necesito usar visibilidad: oculto en la pantalla: ninguno porque la visibilidad toma eventos, mientras que la pantalla no.
Así que hago
.attr('visibility') === "visible"
fuente