Pregunta

En mi ejemplo específico, estoy tratando con un menú desplegable, por ejemplo:

<select name="foo" id="bar">
  <option disabled="disabled" selected="selected">Select an item:</option>
  <option>an item</option>
  <option>another item</option>
</select>

Por supuesto, eso es bastante absurdo, pero me pregunto si se define algún comportamiento estricto.Opera efectivamente rechaza el atributo 'seleccionado' y selecciona el siguiente elemento de la lista.Todos los demás navegadores parecen permitirlo y permanece seleccionado.

Actualizar: Para aclarar, estoy específicamente interesado en la selección inicial.Estoy tratando con uno de esos menús desplegables de tipo 'Seleccione un elemento:', en cuyo caso la primera opción es en realidad una etiqueta y se produce una acción. onchange().Esto es equitativamente bien "mejorado progresivamente", en el sentido de que hay un botón de envío presente y solo se elimina mediante JavaScript.Si se eliminara la opción "seleccionar...", lo que fuera que se convirtiera en el primer elemento no sería seleccionable.¿Estamos simplemente descartando onchange menús desplegables por completo, ¿o debería poder seleccionarse la opción "seleccionar...", pero sin ningún efecto?

¿Fue útil?

Solución

En respuesta a la actualización de la pregunta, diría que la opción 'etiqueta' debería poder seleccionarse, pero hacer que no haga nada al enviarlo o mediante JavaScript, no permitir que el formulario se envíe sin seleccionar un valor (suponiendo que sea un campo obligatorio).

Desde el punto de vista de la usabilidad, sugeriría hacer ambas cosas, de esa manera se cubren todas las bases.

Otros consejos

Las especificaciones HTML son un poco vagas (es decir.completamente ausente) con respecto a esta extraña combinación.Dicen que un elemento de formulario con el conjunto de atributos deshabilitado no debería tener éxito, por lo que realmente no poder ser seleccionado.

Es posible que el navegador lo muestre para que parezca seleccionado, pero no debería aparecer en los datos publicados.Parece que Opera me entendió bien.

Las especificaciones HTML indique que tanto las opciones seleccionadas como deshabilitadas son opciones disponibles para el <option> elemento, pero no especifica qué debería suceder en caso de conflicto.En el sección sobre controles deshabilitados dice

Cuando se establece, el atributo deshabilitado tiene los siguientes efectos en un elemento:

  • Los controles deshabilitados no reciben foco.
  • Los controles deshabilitados se omiten en la navegación con pestañas.
  • Los controles deshabilitados no pueden tener éxito.

también dice

La forma en que se representan los elementos deshabilitados depende del agente de usuario.Por ejemplo, algunos agentes de usuario "atenuan" elementos de menú deshabilitados, etiquetas de botones, etc.En este ejemplo, el elemento INPUT está deshabilitado.Por lo tanto, no puede recibir información del usuario ni su valor se enviará con el formulario.

Si bien este caso específico no se especifica, mi lectura de esto dice que la representación real de un elemento "seleccionado" "deshabilitado" se deja en manos del navegador.Mientras el usuario no pueda seleccionarlo, funcionará de forma estándar.Dice que un script puede actuar sobre el elemento, por lo que es posible que Javascript establezca una opción deshabilitada como seleccionada (o deshabilite una opción seleccionada).Esto no va en contra de los estándares, pero al enviar el formulario, el valor de esa opción no puede ser el valor seleccionado.La lista de selección (supongo) tendría que tener un valor vacío en este caso.

Según la especificación HTML 4.01, desactivado es un atributo estándar para el elemento de opción, pero el comportamiento probablemente sea indeterminado según el estándar (lea la información sobre el elemento seleccionado y los elementos de opciones).Aquí hay una parte que creo que puede arrojar luz sobre las razones de Opera para su implementación:

Cuando se establece, el atributo deshabilitado tiene los siguientes efectos en un elemento:
* Los controles deshabilitados no reciben foco.
* Los controles deshabilitados se omiten en la navegación con pestañas.
* Los controles deshabilitados no pueden tener éxito.

Por lo tanto, es muy probable que esta sea sólo una de esas cosas en las que la especificación es lo suficientemente vaga como para permitir ambas interpretaciones.Este es el tipo de idiosincrasia que hace que la programación para la web sea tan divertida y gratificante.:PAG

¿Estamos simplemente descartando los desplises 'Onchange' por completo, o la opción "Seleccionar ..." debe ser seleccionable, solo sin efecto?

Los menús desplegables "onchange" están mal vistos por tipos más obsesionados con los estándares.

Normalmente haría alguna validación del lado del cliente.Algo así como "seleccione un elemento del menú desplegable".es decir.

¿Debería poder seleccionarse la opción "seleccionar...", pero sin ningún efecto?

Así que dije "Sí" a tu pregunta A o B.:/ ¡Lo siento!

desafortunadamente, realmente no importa lo que debería suceder, porque IE no admite el atributo deshabilitado en el período de opciones.

http://webbugtrack.blogspot.com/2007/11/bug-293-cant-disable-options-in-ie.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top