L'attribut selected
fait et non correspondent à l'état de sélection actuel de l'option. L'attribut selected
correspond à l'option par défaut, qui sera restaurée si .reset()
est appelée (ou si un bouton type="reset"
est cliqué) sur le formulaire. L'état actuel de sélection est accessible à l'aide de la propriété DOM selected
, tandis que la sélection par défaut, telle que reflétée par l'attribut, est accessible sous la propriété DOM defaultSelected
.
va de même pour value
vs defaultValue
sur <input type="text">
/<textarea>
et checked
/defaultChecked
sur type="checkbox"
/"radio"
.
Le nom attr()
de jQuery porte un nom trompeur, et ses tentatives pour prétendre attributs et propriétés sont les mêmes. Lorsque vous utilisez attr()
, vous accédez généralement à la propriété, pas l'attribut. Par conséquent, $(el).attr('selected', 'selected')
est en train de faire el.selected= 'selected'
. Cela fonctionne car 'selected'
, comme avec toute chaîne non vide, est 'vérité': il est converti en el.selected= true
. Mais cela ne touche à aucun moment l'attribut selected="selected"
.
IE complique encore la situation déjà confusion (a) obtenir getAttribute
/setAttribute
mal il accède aux propriétés au lieu des attributs (ce qui est la raison pour laquelle vous ne devriez jamais utiliser ces méthodes dans un document HTML), et (b) de manière incorrecte mappant l'état actuel du formulaire sur les attributs HTML, de sorte que les attributs apparaissent réellement dans ce navigateur.
mais j'ai besoin selected = "selected" il
Pourquoi? Etes-vous en série le formulaire à innerHTML
? Cela n'inclura pas les valeurs de champ de formulaire (encore une fois, sauf dans IE à cause du bogue), donc ce n'est pas un moyen utilisable pour stocker des valeurs de champs.
+1 pour une bonne réponse. – Jakub
Merci. L'autre script _use_ l'option actuellement sélectionnée (à partir de DOM), ou l'option par défaut si rien n'a encore été sélectionné pour un traitement ultérieur. Après avoir lu votre réponse, Afin de laisser ce script choisir l'option actuellement sélectionnée, je suppose que la méthode correcte serait de définir la propriété DOM 'selected' au lieu d'utiliser' selected = "sélectionné" '? – user435216
Oui. Bien qu'il existe également des conditions limitées dans lesquelles certains navigateurs définissent également la valeur actuelle lorsque vous définissez la valeur par défaut. aaaargh! – bobince