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?

Antworten:


347

Verwenden Sie removeAttr ...

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

Oder Prop

$("option:selected").prop("selected", false)

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.


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/


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 .


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");

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


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


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);

}); 


3
$(option).removeAttr('selected') //replace 'option' with selected option's selector

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");


2

Ein anderer einfacher Weg:

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


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.


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();

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.