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>
Der obige Code läuft in Firefox reibungslos, scheint jedoch in Chrome nicht zu funktionieren. In Chrome wird es .is(":visible") = false
auch dann angezeigt, wenn es ist true
.
Ich verwende die folgende jQuery-Version: jquery-1.4.3.min.js
jsFiddle Link: http://jsfiddle.net/WJU2r/4/
jquery
google-chrome
Saad Bashir
quelle
quelle
Antworten:
Es scheint, dass die Auswahl von jQuery
:visible
für einige Inline-Elemente in Chrome nicht funktioniert. Die Lösung besteht darin, einen Anzeigestil hinzuzufügen, der"block"
oder"inline-block"
funktioniert.Beachten Sie auch, dass jQuery eine etwas andere Definition dessen hat, was sichtbar ist als viele Entwickler:
Mit anderen Worten, ein Element muss eine Breite und Höhe ungleich Null haben, um Platz zu beanspruchen und sichtbar zu sein.
Auf der anderen Seite
visibility
ist jQueryhidden
immer noch:visible
für jQuery, da es Speicherplatz verbraucht , selbst wenn es auf Null gesetzt ist oder die Deckkraft Null ist. Dies kann verwirrend sein, wenn das CSS ausdrücklich angibt, dass seine Sichtbarkeit verborgen ist.Die einfache Möglichkeit, es zu betrachten, besteht darin, dass wenn Sie das Element auf dem Bildschirm sehen können, auch wenn Sie seinen Inhalt nicht sehen können, es transparent usw. ist, es sichtbar ist, dh Platz beansprucht.
Ich habe Ihr Markup ein wenig aufgeräumt und einen Anzeigestil hinzugefügt ( dh die Elementanzeige auf "Blockieren" usw. setzen ), und das funktioniert für mich:
GEIGE
Offizielle API-Referenz für
:visible
Ab jQuery 3 hat sich die Definition von
:visible
leicht geändertquelle
Ich weiß nicht, warum Ihr Code auf Chrome nicht funktioniert, aber ich schlage vor, dass Sie einige Problemumgehungen verwenden:
oder
Wenn Sie sicher sind, dass jQuery in Chrome zu schlechten Ergebnissen führt, können Sie sich einfach auf die Überprüfung der CSS-Regeln verlassen:
Außerdem möchten Sie möglicherweise die neueste jQuery verwenden, da möglicherweise Fehler aus einer älteren Version behoben wurden.
quelle
:hidden
und:not(:visible)
. stackoverflow.com/questions/17425543/…Es gibt einen seltsamen Fall, in dem
display: inline
die Prüfung auf Sichtbarkeit fehlschlägt, wenn das Element auf jQuery gesetzt ist .Beispiel:
CSS
jQuery
Um dies zu beheben, können Sie das Element in jQuery ausblenden und dann
show/hide
odertoggle()
sollte es gut funktionieren.quelle
Ich gehe davon aus, dass es etwas mit einer Eigenart in unserem HTML zu tun hat, da andere Stellen auf derselben Seite einwandfrei funktionieren.
Ich konnte dieses Problem nur lösen, indem ich Folgendes tat:
quelle
Wenn Sie die JQuery-Dokumente lesen, gibt es zahlreiche Gründe dafür, dass etwas nicht als sichtbar / verborgen betrachtet wird:
Sie haben einen CSS-Anzeigewert von none.
Sie sind Formularelemente mit type = "hidden".
Ihre Breite und Höhe werden explizit auf 0 gesetzt.
Ein Vorfahrenelement ist ausgeblendet, sodass das Element nicht auf der Seite angezeigt wird.
http://api.jquery.com/visible-selector/
Hier ist ein kleines jsfiddle-Beispiel mit einem sichtbaren und einem versteckten Element:
http://jsfiddle.net/tNjLb/
quelle
Internet Explorer, Chrome, Firefox ...
Browserübergreifende Funktion "isVisible ()"
Vollständiges Beispiel:
Grüße,
Fernando
quelle
Im Allgemeinen lebe ich diese Situation, wenn Eltern meines Objekts versteckt sind. Zum Beispiel, wenn das HTML so ist:
wenn Sie fragen, ob das Kind sichtbar ist wie:
Es wird false zurückgegeben, da das übergeordnete Element nicht sichtbar ist, sodass div auch nicht sichtbar ist.
quelle
Eine browser- / versionübergreifende Lösung, um festzustellen, ob ein Element sichtbar ist, besteht darin, dem Element beim Ein- / Ausblenden eine CSS-Klasse hinzuzufügen / zu entfernen. Der Standardzustand (sichtbar) des Elements könnte beispielsweise folgendermaßen aussehen:
<span id="span1" class="visible">Span text</span>
Entfernen Sie dann beim Ausblenden die Klasse:
$("#span1").removeClass("visible").hide();
Fügen Sie es erneut hinzu:
$("#span1").addClass("visible").show();
Verwenden Sie dann Folgendes, um festzustellen, ob das Element sichtbar ist:
if ($("#span1").hasClass("visible")) { // do something }
Dies löst auch die Auswirkungen auf die Leistung, die bei starker Verwendung des Selektors ": sichtbar" auftreten können und auf die in der Dokumentation von jQuery verwiesen wird:
Offizielle jQuery-API-Dokumentation für den Selektor ": sichtbar"
quelle
Ich habe den nächsten Stil für das übergeordnete Element hinzugefügt und .is (": sichtbar") hat funktioniert.
quelle
Wenn ein Element einem untergeordneten Element untergeordnet ist, wird (": sichtbar") true zurückgegeben, was falsch ist.
Ich habe dies gerade behoben, indem ich dem untergeordneten Element "display: inherit" hinzugefügt habe. Dies wird es für mich behoben:
und das CSS:
Jetzt kann das Element durch Ändern der Sichtbarkeit des übergeordneten Elements effektiv ein- und ausgeschaltet werden, und $ (element) .is (": sichtbar") gibt die Sichtbarkeit des übergeordneten Elements zurück
quelle
Dies ist der Code aus jquery.js, der ausgeführt wird, wenn is (": sichtbar") aufgerufen wird:
Wie Sie sehen, wird mehr als nur die CSS-Anzeigeeigenschaft verwendet. Dies hängt auch von der Breite und Höhe des Inhalts des Elements ab. Stellen Sie daher sicher, dass das Element eine gewisse Breite und Höhe hat. Dazu müssen Sie möglicherweise die Anzeigeeigenschaft auf
"inline-block"
oder setzen"block"
quelle
Ich muss Sichtbarkeit verwenden: versteckte Anzeige: keine, da Sichtbarkeit Ereignisse akzeptiert , während die Anzeige dies nicht tut.
So ich mache
.attr('visibility') === "visible"
quelle