El atributo selected
hace no corresponden al estado de selección actual de la opción. El atributo selected
corresponde a la selección predeterminada, que se restaurará si se llama a .reset()
(o se hace clic en el botón type="reset"
) en el formulario. Se puede acceder al estado de selección actual usando la propiedad DOM selected
, mientras que la selección por defecto, como se refleja en el atributo, se accede bajo la propiedad DOM defaultSelected
.
Lo mismo ocurre con value
vs defaultValue
en <input type="text">
/<textarea>
y checked
/defaultChecked
en type="checkbox"
/"radio"
.
jQuery's attr()
es un nombre engañoso, y sus intentos de pretender que los atributos y las propiedades son la misma cosa son defectuosos. Cuando utiliza attr()
, generalmente accede a la propiedad y no a el atributo. En consecuencia, $(el).attr('selected', 'selected')
está realmente haciendo el.selected= 'selected'
. Esto funciona porque 'selected'
, como con cualquier cadena no vacía, es 'verdad': se convierte a el.selected= true
. Pero esto no toca en ningún momento el atributo selected="selected"
.
IE complica aún más esta situación ya confundir por (a) conseguir getAttribute
/setAttribute
mal por lo que accede a las propiedades en lugar de los atributos (por lo que nunca se debe utilizar estos métodos en un documento HTML), y (b) de forma incorrecta mapear el estado del formulario actual a los atributos HTML, de modo que los atributos realmente aparecen en ese navegador.
pero necesito seleccionado = "seleccionado" no
¿Por qué? ¿Está serializando el formulario al innerHTML
? Esto no incluirá valores de campo de formulario (nuevamente, excepto en IE debido al error), por lo que no es una forma utilizable de almacenar valores de campo.
+1 para una excelente respuesta. – Jakub
Gracias. La otra secuencia de comandos _utiliza_ la opción seleccionada actual (de DOM), o la opción predeterminada si todavía no se ha seleccionado nada para su posterior procesamiento. Después de leer su respuesta, para permitir que esa secuencia de comandos elija la opción actualmente seleccionada, supongo que el método correcto sería establecer la propiedad DOM 'seleccionada' en lugar de usar' seleccionado = 'seleccionado' '? – user435216
Sí. Aunque también hay condiciones limitadas donde algunos navegadores * también * configurarán el valor actual cuando establezca el valor predeterminado. aaaargh! – bobince