2008-09-08 6 views
10

En mi ejemplo específico, estoy tratando con un menú desplegable, por ejemplo:En HTML, ¿qué debería pasar con un elemento de opción seleccionado, deshabilitado?

<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 sin sentido, pero me pregunto si se ha definido ningún comportamiento estricta . Opera rechaza efectivamente el atributo 'seleccionado' y selecciona el siguiente elemento en la lista. Todos los demás navegadores parecen permitirlo, y permanece seleccionado.

Actualización: Para aclarar, estoy específicamente interesado en la selección inicial. Estoy tratando con uno de esos 'Seleccionar un elemento:' - tipo desplegables, en cuyo caso la primera opción es realmente una etiqueta, y se produce una acción onchange(). Esto es bastante bien 'progresivamente mejorado', en que un botón de envío está presente, y solo se elimina mediante JavaScript. Si se elimina la opción "seleccionar ...", lo que sea que se convierta en el primer elemento no se podrá seleccionar. ¿Estamos descartando onchange desplegables por completo, o deberíamos seleccionar la opción "seleccionar ..." sin ningún efecto?

Respuesta

3

En respuesta a la actualización de la pregunta, diría que la opción 'etiqueta' debe ser seleccionable pero que no haga nada en el envío o mediante JavaScript, no permita que el formulario se envíe sin una valor seleccionado (suponiendo que es un campo obligatorio).

Desde el punto de vista de la usabilidad, sugiero que se hagan ambas cosas, de esta forma se cubren todas las bases.

6

Las especificaciones de HTML son un poco vagas (es decir, que faltan por completo) con respecto a esta extraña combinación. Sí afirman que un elemento de formulario con el conjunto de atributos desactivado no debería tener éxito, por lo que realmente no se puede seleccionar .

El navegador puede mostrarlo para que se vea seleccionado, pero no debería aparecer en los datos POST. Parece que Opera lo entendió bien.

+0

upvoted por la respuesta y el avatar Charlie! –

+0

Gracias ... pero es Soren Lorensen en realidad;) –

+0

¡Oh, sí, duh! Fallo en la literatura infantil otra vez –

3

The HTML specs indican que las & desactivadas seleccionadas están disponibles para el elemento <option>, pero no especifica lo que debería suceder en caso de conflicto. En el section on disabled controls se dice

Cuando se establece, el atributo desactivado Se los siguientes efectos sobre un elemento:

  • controles con discapacidad no reciben atención.
  • Los controles deshabilitados se saltan en la navegación de tabulación.
  • Los controles deshabilitados no pueden ser exitosos.

También dice

cómo los elementos se representan con discapacidad depende del agente de usuario. Por ejemplo, algunos agentes de usuario "desactivan" elementos de menú desactivados, etiquetas de botones, etc. En este ejemplo, el elemento ENTRADA está desactivado. Por lo tanto, no puede recibir la entrada del usuario ni su valor se presentará 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" "desactivado" se deja al navegador. Mientras el usuario no pueda seleccionarlo, está funcionando de manera estándar. Sí 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 es contrario a los estándares, pero en la presentación del formulario, el valor de esa opción no podría ser el valor seleccionado. La lista de selección (supongo) debe tener un valor vacío en este caso.

1

Según la especificación HTML 4.01, disabled is a standard attribute for the option element, pero el comportamiento es probablemente 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 aplicación:

Cuando se establece, el atributo disabled tiene los siguientes efectos sobre un elemento:.
* controles deshabilitados no reciben atención
* controles de movilidad se omiten en la navegación con tabulador
* controles de movilidad no pueden ser. exitoso.

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

+0

Whoa, parece que Glenn y yo publicamos * casi * al mismo tiempo, lo que significa que estábamos escribiendo nuestras respuestas de forma esencialmente simultánea. Oh bueno, tuve buenas intenciones. :) –

+0

Grandes mentes .... :) –

0

¿Estamos simplemente descartando 'onchange' drop bajadas por completo, o debería la opción "Seleccionar ..." ser seleccionable, tal sin efecto?

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

Normalmente haría una validación del lado del cliente. "Seleccione un elemento del menú desplegable". es decir,

si la opción "seleccionar ..." se puede seleccionar, simplemente sin ningún efecto?

Así que acabo de decir "Sí" a su pregunta A o B. :/ ¡Lo siento!

Cuestiones relacionadas