jQuery Kann "selected"="selected" nicht über attr () auf Optionselementen setzen?

8
%Vor%

Das obige Auswahlfeld würde die dritte Option als Standard ohne Probleme auswählen. Allerdings , wenn Sie die Elemente mit Firebug überprüfen, ist kein selected="selected" -Attribut innerhalb der ausgewählten <option> vorhanden.

Ich weiß, das ist kein großes Problem, da es immer noch funktioniert , aber ich brauche selected="selected" , damit meine anderen Skripts es fangen und weiterverarbeiten können. Gibt es irgendwelche Problemumgehungen da draußen?

Danke.

    
user435216 16.09.2010, 18:45
quelle

3 Antworten

23

Das selected Attribut entspricht nicht dem aktuellen ausgewählten Status der Option. Das selected -Attribut entspricht der Standard -Ausgewähltheit, die wiederhergestellt wird, wenn .reset() im Formular aufgerufen wird (oder eine type="reset" -Schaltfläche angeklickt wird). Auf den aktuellen Selectedness-Status kann mit der DOM-Eigenschaft selected zugegriffen werden, während auf die Standard-Selectedness, auf die sich das Attribut bezieht, unter der DOM-Eigenschaft defaultSelected zugegriffen wird.

Das gleiche gilt für value vs defaultValue für <input type="text"> / <textarea> und checked /% für co_de% für defaultChecked / type="checkbox" .

jQuerys "radio" wird fälschlicherweise benannt, und seine Versuche, Attribute und Eigenschaften als identisch zu betrachten, sind fehlerhaft. Wenn Sie attr() verwenden, greifen Sie normalerweise auf die Eigenschaft, nicht auf das Attribut zu. Folglich macht attr() tatsächlich $(el).attr('selected', 'selected') . Das funktioniert, weil el.selected= 'selected' , wie bei jeder nicht leeren Zeichenkette, 'truthy' ist: es wird in 'selected' konvertiert. Dies berührt jedoch zu keinem Zeitpunkt das Attribut el.selected= true .

IE macht diese verwirrende Situation noch komplizierter, indem (a) selected="selected" / getAttribute falsch wird, so dass es auf die Eigenschaften statt auf die Attribute zugreift (weshalb Sie diese Methoden nie in einem HTML-Dokument verwenden sollten), und ( b) Falsche Zuordnung des aktuellen Formularstatus zu den HTML-Attributen, sodass die Attribute tatsächlich in diesem Browser angezeigt werden.

  

aber ich brauche ausgewählt="ausgewählt" dort

Warum? Serialisieren Sie das Formular in setAttribute ? Dies beinhaltet keine Feldwerte (außer IE aufgrund des Fehlers), daher ist dies keine brauchbare Möglichkeit, Feldwerte zu speichern.

    
bobince 16.09.2010, 19:02
quelle
3

Dies funktioniert wie erwartet, überprüfen Sie es: Ссылка

    
letronje 16.09.2010 18:55
quelle
1

Es sollte $('.test').attr('selected', true);​

sein

auch

<option selected>value</option>

Es wird nicht als selected="selected"

angezeigt     
Jakub 16.09.2010 18:46
quelle

Tags und Links