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>
Le code ci-dessus fonctionne sans problème dans Firefox, mais ne semble pas fonctionner dans Chrome. Dans Chrome, il s'affiche .is(":visible") = false
même lorsqu'il l'est true
.
J'utilise la version jQuery suivante: jquery-1.4.3.min.js
Lien jsFiddle: http://jsfiddle.net/WJU2r/4/
jquery
google-chrome
Saad Bashir
la source
la source
Réponses:
Il semble que le
:visible
sélecteur de jQuery ne fonctionne pas pour certains éléments en ligne dans Chrome. La solution consiste à ajouter un style d'affichage, comme"block"
ou"inline-block"
pour le faire fonctionner.Notez également que jQuery a une définition quelque peu différente de ce qui est visible que de nombreux développeurs:
En d'autres termes, un élément doit avoir une largeur et une hauteur non nulles pour consommer de l'espace et être visible.
D'un autre côté, même si son
visibility
est défini surhidden
ou l'opacité est nulle, c'est toujours:visible
à jQuery car il consomme de l'espace, ce qui peut être déroutant lorsque le CSS dit explicitement que sa visibilité est masquée.Le moyen le plus simple de le regarder est que si vous pouvez voir l'élément à l'écran, même si vous ne pouvez pas voir son contenu, il est transparent, etc., il est visible, c'est-à-dire qu'il prend de la place.
J'ai un peu nettoyé votre balisage et ajouté un style d'affichage ( c'est-à-dire en définissant l'affichage des éléments sur "bloquer", etc. ), et cela fonctionne pour moi:
VIOLON
Référence officielle de l'API pour
:visible
Depuis jQuery 3, la définition de
:visible
a légèrement changéla source
Je ne sais pas pourquoi votre code ne fonctionne pas sur Chrome, mais je vous suggère d'utiliser certaines solutions:
ou
Si vous êtes certain que jQuery vous donne de mauvais résultats dans Chrome, vous pouvez simplement vous fier à la vérification des règles CSS:
De plus, vous voudrez peut-être utiliser la dernière jQuery, car il pourrait y avoir des bogues d'une ancienne version corrigés.
la source
:hidden
et:not(:visible)
. stackoverflow.com/questions/17425543/…Il y a un cas étrange où si l'élément est défini sur
display: inline
jQuery, la vérification de la visibilité échoue.Exemple:
CSS
jQuery
Pour le corriger, vous pouvez masquer l'élément dans jQuery et que
show/hide
outoggle()
devrait fonctionner correctement.la source
Je suppose que cela a quelque chose à voir avec une bizarrerie dans notre HTML parce que d'autres endroits sur la même page fonctionnent très bien.
La seule façon dont j'ai pu résoudre ce problème était de faire:
la source
Si vous lisez les documents jquery, il y a de nombreuses raisons pour que quelque chose ne soit pas considéré comme visible / caché:
Ils ont une valeur d'affichage CSS nulle.
Ce sont des éléments de formulaire de type = "caché".
Leur largeur et leur hauteur sont explicitement définies sur 0.
Un élément ancêtre est masqué, donc l'élément n'est pas affiché sur la page.
http://api.jquery.com/visible-selector/
Voici un petit exemple jsfiddle avec un élément visible et un élément caché:
http://jsfiddle.net/tNjLb/
la source
Internet Explorer, Chrome, Firefox ...
Fonction Cross Browser "isVisible ()"
Exemple complet:
Cordialement,
Fernando
la source
Généralement, je vis cette situation lorsque le parent de mon objet est caché. par exemple lorsque le html est comme ceci:
si vous demandez si l'enfant est visible comme:
il renverra false car son parent n'est pas visible, de sorte que div ne sera pas visible également.
la source
Une solution multi-navigateur / version pour déterminer si un élément est visible, consiste à ajouter / supprimer une classe CSS à l'élément lors de l'affichage / masquage. L'état par défaut (visible) de l'élément pourrait être par exemple comme ceci:
<span id="span1" class="visible">Span text</span>
Ensuite, sur masquer, supprimez la classe:
$("#span1").removeClass("visible").hide();
À l'affiche, ajoutez-le à nouveau:
$("#span1").addClass("visible").show();
Ensuite, pour déterminer si l'élément est visible, utilisez ceci:
if ($("#span1").hasClass("visible")) { // do something }
Cela résout également les implications en termes de performances, qui peuvent survenir lors d'une utilisation intensive du sélecteur ": visible", pointées dans la documentation de jQuery:
Documentation officielle de l'API jQuery pour le sélecteur ": visible"
la source
J'ai ajouté le style suivant sur le parent et .is (": visible") a fonctionné.
la source
Si un élément est enfant d'un élément masqué, (": visible") renvoie true, ce qui est incorrect.
Je viens de corriger cela en ajoutant "display: inherit" à l'élément enfant. Cela le corrigera pour moi:
et le CSS:
Désormais, l'élément peut être activé et désactivé efficacement en modifiant la visibilité du parent, et $ (element) .is (": visible") rendra la visibilité de l'élément parent
la source
C'est le morceau de code de jquery.js qui s'exécute lorsque is (": visible") est appelé:
Comme vous pouvez le voir, il utilise plus que la propriété d'affichage CSS. Cela dépend également de la largeur et de la hauteur du contenu de l'élément. Par conséquent, assurez-vous que l'élément a une certaine largeur et hauteur. Et pour ce faire, vous devrez peut-être définir la propriété d'affichage sur
"inline-block"
ou"block"
la source
J'ai besoin d'utiliser la visibilité: caché au moment de l' affichage: aucun car la visibilité prend des événements, tandis que l' affichage ne le fait pas.
Moi aussi
.attr('visibility') === "visible"
la source