Question

Dans mon exemple spécifique, j'ai affaire à 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, cela n'a aucun sens, mais je me demande si un comportement strict est défini.Opera rejette effectivement l'attribut « sélectionné » et sélectionne l'élément suivant dans la liste.Tous les autres navigateurs semblent l'autoriser et il reste sélectionné.

Mise à jour: Pour clarifier, je suis particulièrement intéressé par la sélection initiale.J'ai affaire à l'une de ces listes déroulantes de type « Sélectionner un élément : », auquel cas la première option est en réalité une étiquette et une action se produit. onchange().C'est assez bien « progressivement amélioré », dans la mesure où un bouton de soumission est présent et supprimé uniquement via JavaScript.Si l'option "sélectionner..." était supprimée, le premier élément qui deviendrait alors le premier élément ne serait pas sélectionnable.Sommes-nous simplement en train d'exclure onchange des listes déroulantes complètement, ou l'option "sélectionner..." devrait-elle être sélectionnable, mais sans effet ?

Était-ce utile?

La solution

En réponse à la mise à jour de la question, je dirais que l'option « étiquette » devrait être sélectionnable, mais soit ne rien faire lors de la soumission, soit via JavaScript, ne pas autoriser la soumission du formulaire sans qu'une valeur soit sélectionnée (en supposant qu'elle soit un champ obligatoire).

Du point de vue de la convivialité, je suggérerais de faire les deux, de cette façon toutes les bases sont couvertes.

Autres conseils

Les spécifications HTML sont un peu vagues (c.-à-d.complètement absent) au regard de cette étrange combinaison.Ils disent qu'un élément de formulaire avec l'ensemble d'attributs désactivé ne devrait pas réussir, donc c'est vraiment ne peut pas être sélectionné.

Le navigateur peut très bien le restituer de manière à ce qu'il semble sélectionné, mais il ne devrait pas apparaître dans les données POSTées.On dirait qu'Opera a raison pour moi.

Les spécifications HTML indiquer que les options sélectionnées et désactivées sont disponibles pour le <option> élément, mais ne précise pas ce qui doit se passer en cas de conflit.Dans le section sur les commandes désactivées ça dit

Lorsqu'il est défini, l'attribut désactivé a les effets suivants sur un élément:

  • Les contrôles désactivés ne reçoivent pas le focus.
  • Les contrôles désactivés sont ignorés dans la navigation par onglets.
  • Les contrôles désactivés ne peuvent pas réussir.

ça dit aussi

La façon dont les éléments désactivés sont rendus dépend de l'agent utilisateur.Par exemple, certains agents utilisateurs « grisent » les éléments de menu, les étiquettes de boutons, etc.Dans cet exemple, l'élément INPUT est désactivé.Par conséquent, il ne peut pas recevoir de saisie de l'utilisateur et sa valeur ne sera pas soumise avec le formulaire.

Bien que ce cas spécifique ne soit pas spécifié, ma lecture de ceci indique que le rendu réel d'un élément « désactivé » « sélectionné » est laissé au navigateur.Tant que l'utilisateur ne peut pas le sélectionner, cela fonctionne normalement.Il indique qu'un script peut agir sur l'élément, il est donc 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 peut pas être la valeur sélectionnée.La liste de sélection devrait (je suppose) avoir une valeur vide dans ce cas.

Selon la spécification HTML 4.01, désactivé est un attribut standard pour l'élément option, mais le comportement est probablement indéterminé en fonction de la norme (lisez les informations sur l'élément select et les éléments options.Voici une partie qui, je pense, pourrait éclairer les raisons pour lesquelles Opera a été mis en œuvre :

Lorsqu'il est défini, l'attribut désactivé a les effets suivants sur un élément :
* Les commandes désactivées ne reçoivent pas le focus.
* Les contrôles désactivés sont ignorés dans la navigation par onglets.
* Les contrôles désactivés ne peuvent pas réussir.

Il est donc très probable que ce ne soit qu’une de ces choses pour lesquelles les spécifications sont suffisamment vagues pour permettre les deux interprétations.C’est le genre d’idiosyncrasie qui rend la programmation pour le Web si amusante et gratifiante.:P

Sommes-nous simplement en excluant complètement «onchange» «Onchange», ou l'option «sélectionner ...» devrait-elle être sélectionnable, tout simplement sans effet?

Les listes déroulantes « onchange » sont mal vues par les types plus obsédés par les normes.

Je ferais généralement une validation côté client."Veuillez sélectionner un élément dans la liste déroulante".c'est à dire.

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

Alors j'ai juste dit "Oui" à votre question A ou B.:/ Désolé!

malheureusement, ce qui devrait arriver n'a pas vraiment d'importance, car IE ne prend pas en charge l'attribut désactivé pendant la période d'options.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top