10 votes

En HTML, que doit-il arriver à un élément d'option sélectionné et désactivé ?

Dans mon exemple spécifique, il s'agit d'une liste déroulante, par exemple :

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

Bien sûr, c'est assez absurde, mais je me demande si un comportement strict est défini. Opera rejette effectivement l'attribut "selected" et sélectionne l'élément suivant dans la liste. Tous les autres navigateurs semblent l'autoriser et l'élément reste sélectionné.

Mise à jour : Pour clarifier, je m'intéresse plus particulièrement à la sélection initiale. J'ai affaire à l'une de ces listes déroulantes de type "Sélectionner un élément :", dans laquelle la première option est en fait une étiquette, et une action se produit onchange() . Il s'agit de équitablement bien "progressivement amélioré", en ce sens qu'un bouton de soumission est présent et ne peut être supprimé que par JavaScript. Si l'option "sélectionner..." était supprimée, ce qui deviendrait alors le premier élément ne serait pas sélectionnable. Sommes-nous en train d'exclure onchange ou l'option "sélectionner..." doit-elle être sélectionnable, mais sans effet ?

6voto

David Heggie Points 2255

Les spécifications HTML sont un peu vagues (c'est-à-dire complètement absentes) en ce qui concerne cette combinaison étrange. Elles stipulent qu'un élément de formulaire avec l'attribut "disabled" ne doit pas être accepté. ne peut être sélectionné.

Le navigateur peut bien le rendre de telle sorte qu'il semble sélectionné, mais il ne devrait pas apparaître dans les données envoyées. Il me semble qu'Opera a raison.

3voto

Glenn Slaven Points 15742

Les spécifications HTML indique que les options "sélectionné" et "désactivé" sont toutes deux disponibles pour les <option> mais ne précise pas ce qui doit se passer en cas de conflit. Dans l'élément section sur les contrôles des personnes handicapées Il est écrit

Lorsqu'elle est activée, la fonction de désactivation les effets suivants sur un élément :

  • Les contrôles désactivés ne sont pas pris en compte.
  • Les contrôles désactivés sont ignorés dans la navigation par onglets.
  • Les contrôles désactivés ne peuvent pas aboutir.

Il est également indiqué

Le rendu des éléments désactivés dépend de l'agent utilisateur. Par exemple, certains agents utilisateurs "grisent" les éléments de menu désactivés, les étiquettes de boutons, etc. Dans cet exemple, l'élément INPUT est désactivé. Dans cet exemple, l'élément INPUT est désactivé. Par conséquent, il ne peut pas recevoir d'entrée de l'utilisateur et sa valeur ne sera pas soumise avec le formulaire.

Bien que ce cas particulier ne soit pas spécifié, je pense que le rendu d'un élément "sélectionné" "désactivé" est laissé à l'appréciation du navigateur. Tant que l'utilisateur ne peut pas le sélectionner, il fonctionne de manière standard. Il est indiqué qu'un script peut agir sur l'élément, de sorte qu'il est possible pour Javascript de définir une option désactivée comme sélectionnée (ou de désactiver une option sélectionnée). Cela n'est pas contraire aux normes, mais lors de la soumission du formulaire, la valeur de cette option ne pourrait pas être la valeur sélectionnée. La liste de sélection devrait (je suppose) avoir une valeur vide dans ce cas.

2voto

Glenn Slaven Points 15742

Pour répondre à la mise à jour de la question, je dirais que l'option "étiquette" devrait pouvoir être sélectionnée, mais soit qu'elle ne fasse rien lors de la soumission, soit que, via JavaScript, elle ne permette pas au formulaire d'être soumis sans qu'une valeur soit sélectionnée (en supposant qu'il s'agisse d'un champ obligatoire).

D'un point de vue pratique, je suggérerais de faire les deux, de manière à ce que toutes les bases soient couvertes.

1voto

Jason Bunting Points 27534

Selon la spécification HTML 4.01, handicapé est un attribut standard pour l'élément option mais le comportement est probablement indéterminé sur la base de la norme (lire les informations sur l'élément select et les éléments options). Voici une partie qui, je pense, peut éclairer les raisons de l'implémentation d'Opera :

Lorsqu'il est défini, l'attribut disabled a les effets suivants sur un élément :
* Les contrôles désactivés ne sont pas pris en compte.
* Les contrôles désactivés sont ignorés dans la navigation par onglets.
* Les contrôles désactivés ne peuvent pas aboutir.

Il est donc très probable qu'il s'agisse d'une de ces choses où la spécification est suffisamment vague pour permettre les deux interprétations. C'est le genre d'idiosyncrasie qui rend la programmation pour le web si amusante et gratifiante. :P

0voto

David Spillett Points 22424

Sommes-nous en train de ruliner ou est-ce que l'option l'option "select..." doit-elle être sélectionnable, tout simplement ? sans effet ?

Les menus déroulants "onchange" sont mal vus par les plus obsédés par les normes.

En règle générale, je procéderais à une validation côté client. Ce genre d'opération consiste à dire "Veuillez sélectionner un élément dans la liste déroulante".

l'option "select..." devrait-elle être sélectionnable, mais sans effet ?

Je viens donc de répondre "oui" à ta question A ou B :/ Désolé !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X