Dieser Fall im HTML5 spec erwähnt:
Auf Einstellung der selectedIndex
Attribut muss die selectedness aller Option Elemente in der Liste der Optionen auf false, und dann die Option Element In der Liste der Optionen, deren Index der angegebene neue Wert ist, muss der Wert selectedness auf true und dreckig auf true gesetzt sein.
Hinweis: Dieses in keinem Element führen kann einen selectedness Satz gilt auch im Falle des select-Element, das keine Mehrfach Attribut und einer Displaygröße von 1.
. ..
Wenn Knoten eingefügt oder Knoten entfernt werden, führt die Liste der Optionen zu einem oder mehreren Optionselementen oder wenn ein Optionselement in der Liste der Optionen asks for a reset ist, dann, wenn das Element des Auswahlelements multipl Das Attribut abwesend ist, die Anzeigegröße des Auswahlelements 1 ist und die Option selectedness für keine Optionselemente in der Auswahlliste des Auswahlelements auf true gesetzt ist, muss der Benutzeragent die selectedness des ersten Optionselements in der Liste festlegen der Optionen in Baumreihenfolge, die nicht deaktiviert ist, sofern vorhanden, auf "wahr".
Ändern einer Option über seine innerHTML
oder textContent
-Eigenschaft löst diesen Reset (außer Firefox), aber die text
Eigenschaft (die <option>
nur ist) ist es nicht auslösen (außer IE).
// these triggers the <select> element's reset (except on Firefox)
$("#three")[0].innerHTML = "foo";
$("#three")[0].textContent = "foo";
// this does not trigger the reset (except on IE)
$("#three")[0].text = "foo";
Firefox die Spezifikation streng mehr folgt, es setzt nur die <select>
wenn es eine neue <option>
ist, oder es war eine Entfernung von einem der <option>
s. Aber es kann den Reset nicht ausführen, während <option>
's selected
Eigenschaft auf false (aber that should trigger der Reset auch) gesetzt wird.
Kurz gesagt, alle aktuellen Browser nicht die Spezifikation vollständig zu implementieren, so dass die einzige plattformübergreifende Abhilfe ist selectedIndex
als letzte Operation ein ausgesuchtes zu ändern (und seine untergeordneten Elemente):
$("#three").html("moo");
$(".drpmnu").prop("selectedIndex", -1);
Das Beste, was ich herausfinden kann, ist, dass es ein Repaint-Problem ist. Wenn Sie den Text der Option ändern, bewirkt dies, dass die Auswahl neu gezeichnet wird. Im Repaint gibt es ein Problem, bei dem die Requisite auf den Standardwert zurückgesetzt wird. –
'$ ('# three') [0] .text =" moo ";' setzt den Index nicht zurück, aber 'textContent' tut das. – dandavis
@dandavis, '$ ('# drei') [0] .text = "moo",' nicht in IE nicht funktioniert (zumindest in IE11) – Kiril