Ich habe festgestellt, dass Chrome es mir anscheinend nicht erlaubt, mich <option>
in einem zu verstecken <select>
. Firefox wird.
Ich muss die <option>
s ausblenden, die einem Suchkriterium entsprechen. In den Chrome-Web-Tools kann ich sehen, dass sie display: none;
von meinem JavaScript korrekt eingestellt wurden, aber sobald dann auf das <select>
Menü geklickt wird, werden sie angezeigt.
Wie kann ich diese <option>
s, die meinen Suchkriterien entsprechen, NICHT anzeigen lassen, wenn auf das Menü geklickt wird? Vielen Dank!
javascript
jquery
css
dom
Jesse Atkinson
quelle
quelle
Antworten:
Sie müssen zwei Methoden zum Ausblenden implementieren.
display: none
funktioniert für FF, aber nicht für Chrome oder IE. Die zweite Methode ist also, das<option>
in ein<span>
mit zu verpackendisplay: none
. FF wird es nicht tun (technisch ungültiges HTML, gemäß der Spezifikation), aber Chrome und IE werden es tun und es wird die Option verbergen.EDIT: Oh ja, ich habe dies bereits in jQuery implementiert:
EDIT 2: So würden Sie diese Funktion verwenden:
BEARBEITEN 3: Zusätzliche Prüfung hinzugefügt, die von @ user1521986 vorgeschlagen wurde
quelle
<select>
(mit jQuery's.val()
) zu lesen, zurückgegebennull
. Ich habe das gerade in Chrome 29 getestet, also Vorsicht, Googler!Für HTML5 können Sie das Attribut 'hidden' verwenden.
Es wird von IE <11 nicht unterstützt. Wenn Sie jedoch nur einige Elemente ausblenden müssen, ist es möglicherweise besser, das verborgene Attribut in Kombination mit deaktiviert festzulegen, als Elemente hinzuzufügen / zu entfernen oder nicht semantisch korrekte Konstruktionen auszuführen.
Referenz .
quelle
disabled
so ein, dass Browser, die das globale HTML5-hidden
Attribut nicht unterstützen, eine visuelle Anzeige für den Benutzer haben.<option hidden disabled>
, sodass es in allen guten Browsern ausgeblendet und in den anderen deaktiviert wird.Ich würde vorschlagen , dass Sie nicht die Lösungen verwenden , die eine Verwendung
<span>
Wrapper , weil es nicht gültige HTML ist, die Probleme auf dem Weg führen könnte. Ich denke, die bevorzugte Lösung besteht darin, alle Optionen, die Sie ausblenden möchten, tatsächlich zu entfernen und bei Bedarf wiederherzustellen. Mit jQuery benötigen Sie nur diese drei Funktionen:Die erste Funktion speichert den ursprünglichen Inhalt der Auswahl . Aus Sicherheitsgründen können Sie diese Funktion beim Laden der Seite aufrufen.
Diese nächste Funktion ruft die obige Funktion auf, um sicherzustellen, dass der ursprüngliche Inhalt gespeichert wurde, und entfernt dann einfach die Optionen aus dem DOM.
Die letzte Funktion kann immer dann verwendet werden, wenn Sie alle ursprünglichen Optionen "zurücksetzen" möchten.
Beachten Sie, dass alle diese Funktionen erwarten, dass Sie jQuery-Elemente übergeben. Beispielsweise:
Hier ist ein funktionierendes Beispiel: http://jsfiddle.net/9CYjy/23/
quelle
var value=$select.val(); $select.html(ogHTML); $select.val(value);
, um den ausgewählten Wert auch nach der Wiederherstellung ausgewählt zu halten.Die Antwort von Ryan P sollte geändert werden in:
Andernfalls wird es in zu viele Tags eingeschlossen
quelle
<select>
nur<option>
oder<optgroup>
oder skriptunterstützende Elemente enthalten sollte. Sie sollten daher die Verwendung ungültiger<span>
Wrapper vermeiden .Die toggleOption-Funktion ist nicht perfekt und hat in meiner Anwendung böse Fehler verursacht. jQuery wird mit .val () und .arraySerialize () verwechselt. Versuchen Sie, die Optionen 4 und 5 auszuwählen, um zu sehen, was ich meine:
quelle
Ausgewählte Eingänge sind auf diese Weise schwierig. Wie wäre es stattdessen mit einer Deaktivierung? Dies funktioniert browserübergreifend:
Dadurch wird jedes andere
<option>
Element deaktiviert , Sie können jedoch auswählen, welches Element Sie möchten.Hier ist eine Demo: http://jsfiddle.net/jYWrH/
Hinweis: Wenn Sie die deaktivierte Eigenschaft eines Elements entfernen möchten, können Sie sie verwenden
.removeProp('disabled')
.Aktualisieren
Sie können die
<option>
Elemente, die Sie ausblenden möchten, in einem versteckten Auswahlelement speichern :Sie können die
<option>
Elemente dann wieder zum ursprünglichen Auswahlelement hinzufügen :In diesen beiden Beispielen wird erwartet, dass das sichtbare Auswahlelement die ID von
visible
und das versteckte Auswahlelement die ID von hathidden
.Hier ist eine Demo: http://jsfiddle.net/jYWrH/1/
Beachten Sie, dass dies
.on()
in jQuery 1.7 neu ist und dass die Verwendung für diese Antwort dieselbe ist wie.bind()
: http://api.jquery.com/onquelle
Einfache Antwort: Sie können nicht. Formularelemente verfügen nur über sehr eingeschränkte Gestaltungsmöglichkeiten.
Die beste Alternative wäre
disabled=true
, die Option festzulegen (und möglicherweise eine graue Farbe, da dies nur der IE automatisch ausführt). Dadurch wird die Option nicht mehr angeklickt.Wenn Sie können, können Sie das
option
Element auch vollständig entfernen .quelle
quelle
Da Sie JS bereits verwenden, können Sie ein verstecktes SELECT-Element auf der Seite erstellen und es für jedes Element, das Sie in dieser Liste ausblenden möchten, in die versteckte Liste verschieben. Auf diese Weise können sie leicht wiederhergestellt werden.
Ich kenne keine Möglichkeit, dies in reinem CSS zu tun ... Ich hätte gedacht, dass die Anzeige: Kein Trick hätte funktioniert.
quelle
!!! WARNUNG !!!
Ersetzen Sie das zweite "IF" durch "WHILE" oder funktioniert nicht!
quelle
Sie sollten sie aus dem
<select>
JavaScript entfernen . Dies ist der einzig garantierte Weg, um sie zum Verschwinden zu bringen.quelle
$('options').remove();
Dieser scheint für mich in Chrom zu funktionieren
quelle
Spät im Spiel, aber die meisten davon scheinen ziemlich kompliziert zu sein.
So habe ich es gemacht:
Markup von Select-1:
Markup von Select-2:
quelle