Der beste Weg, um die Auswahl einer <Auswahl> in jQuery aufzuheben?

219
<select size="2">
<option selected="selected">Input your option</option>
<option>Input your option</option>
</select>

Was ist der beste Weg, mit jQuery die Option elegant abzuwählen?

user198729
quelle

Antworten:

347

Verwenden Sie removeAttr ...

$("option:selected").removeAttr("selected");

Oder Prop

$("option:selected").prop("selected", false)
Ei Maung
quelle
3
Funktioniert nicht unter IE 8. Siehe stackoverflow.com/questions/7960773/…
Clinton Pierce
60
Diese Antwort ist nicht die richtige Vorgehensweise (und funktioniert nicht universell zum Booten). Die richtigen Ansätze sind entweder .val([])oder .prop("selected", false)- nach unten scrollen.
Jon
1
JQuery muss dies behoben haben. Es funktioniert perfekt für mich in IE8 mit JQuery 1.7.2.
Mikey G
2
ODER .val (['']), um den leeren Wert auszuwählen, falls vorhanden.
Mark
2
$("option:selected").prop("selected", false)manchmal funktioniert es nicht. (funktioniert nicht im Chrome-Browser mit jquery v1.4.2)
Rohit Goyani
163

Hier gibt es viele Antworten, aber leider sind alle ziemlich alt und verlassen sich daher auf attr/ removeAttrwas wirklich nicht der richtige Weg ist.

@coffeeyesplease erwähnt korrekt, dass eine gute browserübergreifende Lösung zu verwenden ist

$("select").val([]);

Eine weitere gute browserübergreifende Lösung ist

// Note the use of .prop instead of .attr
$("select option").prop("selected", false);

Sie können es sehen , einen Selbsttest läuft hier . Getestet auf IE 7/8/9, FF 11, Chrome 19.

Jon
quelle
1
Viel besser als die ausgewählte Antwort (funktioniert browserübergreifend und beinhaltet kein Durcheinander mit den Attributmengen)
Timothy Groote
1
Perfekte Antwort für die Abwahl aller Optionen. Es kann jedoch nicht wirklich verwendet werden, um die Auswahl bestimmter Optionen aufzuheben, wohingegen removeAttr dies kann.
Mikey G
2
@MikeyG: Dies , dass die Feststellung , Array.indexOfbraucht eine polyfill für IE <9 (oder Sie können eine beliebige gleichwertige Methode verwenden , dass viele JS Bibliotheken bereitstellen).
Jon
1
Haben Sie den HTML-Code danach überprüft $('#select').val([]);? Leider wird das selected="selected"Attribut dadurch nicht entfernt . Das kann dazu führen, dass falsche Daten veröffentlicht werden. Ich empfehle diesen Ansatz nicht!
Fr0zenFyr
1
@ Fr0zenFyr: Wenn Sie mit einer vorausgewählten Option beginnen und diese manuell mit einem Mausklick abwählen, wird das Attribut auch nicht entfernt - und dennoch wird beim Senden des Formulars garantiert, dass die korrekten Daten veröffentlicht werden. Es gibt einen großen Unterschied zwischen den HTML- Attributen (die den Anfangszustand bestimmen) und den DOM- Eigenschaften (die bestimmen, was angezeigt wird und was gesendet wird). Dies ist in der Tat der Grund, warum Lösungen, die sich auf das Attribut konzentrieren, falsch sind. Das Attribut bestimmt den Anfangswert der Eigenschaft, aber das ist soweit es geht.
Jon
24

Es ist schon eine Weile her, seit ich gefragt wurde, und ich habe dies nicht mit älteren Browsern getestet, aber es scheint mir eine viel einfachere Antwort zu sein

$("#selectID").val([]);

.val () funktioniert auch für select http://api.jquery.com/val/

coffeeyesplease
quelle
Dies ist der beste Weg und löscht den Wert in den meisten Browsern - danke.
Sagive SEO
Dies funktioniert nur bei Mehrfachauswahl. $("select option").prop("selected", false);Funktioniert universell (bei Mehrfach- und Einzelauswahl).
Splashout
23

Einfachste Methode

$('select').val('')

Ich habe dies einfach für die Auswahl selbst verwendet und es hat den Trick gemacht.

Ich bin auf jQuery 1.7.1 .

Joshua Pinter
quelle
1
Ich hatte nur ein Problem mit dieser Lösung. Option Tag hat noch Attribut "ausgewählt"
Tamara
@ Tamara Wirklich? Ich habe nicht nachgesehen. Verwenden Sie "ausgewählt" für etwas und das bringt die Dinge für Sie durcheinander?
Joshua Pinter
19

Antworten funktionieren bisher nur für Mehrfachauswahl in IE6 / 7; Für die häufigere Nicht-Mehrfachauswahl müssen Sie Folgendes verwenden:

$("#selectID").attr('selectedIndex', '-1');

Dies wird in dem von flyfishr64 verlinkten Beitrag erklärt. Wenn Sie es sich ansehen, werden Sie sehen, wie es zwei Fälle gibt - Multi / Nicht-Multi. Nichts hindert Sie daran, beide nach einer vollständigen Lösung zu suchen:

$("#selectID").attr('selectedIndex', '-1').find("option:selected").removeAttr("selected");
der Werkzeugmann
quelle
7

Oh jquery.

Da es noch einen nativen Javascript-Ansatz gibt, muss ich einen bereitstellen.

var select = document.querySelector('select'); //hopefully you'll use a better selector query
select.selectedIndex = 0; // or -1, 0 sets it to first option, -1 selects no options

Und nur um Ihnen zu zeigen, wie viel schneller dies ist: Benchmark

Blaine Kasten
quelle
Vielen Dank für diese Antwort ohne jQuery! :)
Saromase
6
$("#selectID option:selected").each(function(){
  $(this).removeAttr("selected");
});

Dies würde jedes Element durchlaufen und nur diejenigen auswählen, die aktiviert sind

DinoMyte
quelle
5

Ein kurzer Blick auf Google hat diesen Beitrag gefunden , in dem beschrieben wird, wie Sie für einzelne und mehrere Auswahllisten im IE das tun, was Sie möchten. Die Lösung scheint auch ziemlich elegant zu sein:

$('#clickme').click(function() {
        $('#selectmenu option').attr('selected', false);

}); 
Jeff Paquette
quelle
4
$("#select_id option:selected").prop("selected", false);
Premkumar
quelle
3
$(option).removeAttr('selected') //replace 'option' with selected option's selector
Brandon Henry
quelle
3

Vielen Dank für die Lösung.

Die Lösung für die Single-Choice-Combo-Liste funktioniert einwandfrei. Ich habe dies gefunden, nachdem ich auf vielen Websites gesucht habe.

$("#selectID").attr('selectedIndex', '-1').children("option:selected").removeAttr("selected");
Madeswaran Govindan
quelle
2
$("option:selected").attr("selected", false);
Charlie Brown
quelle
2

Ein anderer einfacher Weg:

$("#selectedID")[0].selectedIndex = -1

Rafael
quelle
1

Wenn ich ein Auswahlmenü verwende, ist normalerweise jeder Option ein Wert zugeordnet. Beispielsweise

<select id="nfl">
  <option value="Bears Still...">Chicago Bears</option>
  <option selected="selected" value="Go Pack">Green Bay Packers</option>
</select>
console.log($('#nfl').val()) logs "Go Pack" to the console
Set the value to an empty string $('#nfl').val("")
console.log($('#nfl').val()) logs "" to the console

Dadurch wird das ausgewählte Attribut nicht aus der Option entfernt, aber alles, was ich wirklich möchte, ist der Wert.

jtaz
quelle
0

Legen Sie eine ID in Ihrer Auswahl fest, wie:
<select id="foo" size="2">

Dann können Sie verwenden:
$("#foo").prop("selectedIndex", 0).change();

TheAlphaGhost
quelle