68 votes

Un attribut de nom doit-il être unique dans un document HTML ?

Je me souviens avoir lu une fois dans les spécifications que les deux id et l'attribut name partagent le même espace de noms et doivent être uniques. Depuis lors, j'ai toujours essayé de satisfaire à cette exigence dans mes applications, redoutant même de donner le même nom à l'attribut id y name au même élément.

Mais dernièrement, j'ai commencé à travailler avec ASP.NET MVC 3, et ce dernier (comme PHP) peut utiliser la même méthode de travail que le système de gestion des données. name sur plusieurs contrôles d'entrée pour former une collection de valeurs côté serveur. J'ai essayé de rechercher la section correspondante dans la spécification, mais je ne l'ai pas trouvée. Peut-être ai-je mal compris quelque chose ou lu la mauvaise documentation ?

Comment c'est alors ? Je veux produire un HTML aussi valide que possible (à la fois 4.01 et 5 dans des applications différentes). Puis-je utiliser cette astuce sans crainte ? Ou est-ce que je violerais quelque chose et devrais plutôt m'en tenir à des valeurs uniques ?

63voto

Kolten Points 1742

El name n'est valable que sur le <form> et les éléments de forme ( <input> , <textarea> y <select> ). Il est utilisé pour spécifier le name à associer à la paire nom/valeur qui est soumise sur un post de formulaire.

Par exemple :

<input type="checkbox" name="foo" value="1" />

si coché, soumettra foo=1 . Dans le DOM, vous pouvez faire référence à des éléments de formulaire à partir de la balise form.elements en spécifiant l'option name en tant qu'index. Si name n'est pas unique, la collection renvoie un tableau d'éléments plutôt que l'élément. Les DOM modernes permettent de rechercher les éléments de formulaire par leur nom :

 document.getElementsByName(nameValue)

note : il retourne toujours un tableau même si un seul élément est trouvé.

id provient du monde XML et constitue un identifiant unique pour tout nœud, pas seulement pour les éléments de formulaire. Contrairement à l'attribut name il est valide sur n'importe quel nœud HTML. De même que l'attribut name il doit respecter les règles relatives aux identifiants valides. L'identifiant doit commencer par un alpha, et ne doit contenir que des alpha ( [a-zA-Z] ), les chiffres, le trait d'union, le soulignement et les deux points (notez que ASP.NET enfreint cette règle en commençant les ID réservés par un soulignement - ils échoueront donc toujours à une vérification HTML/XML - en fait, certains proxies les suppriment). Pour trouver un élément HTML par id que vous utilisez :

document.getElementById(idvalue)

cela ne renvoie qu'un seul noeud DOM.

1 votes

Ahh, Je l'ai trouvé ! Il semble que j'avais manqué le contexte :) En effet, il y a une poignée d'autres éléments que les name s'applique, mais là, il ne fait que dupliquer l'attribut id et en fait doit être égal à celui-ci si les deux sont définis. Heureusement, cela ne s'applique pas aux éléments de formulaire :)

0 votes

Il est important de noter que le <a> utilise également l'attribut name pour le texte d'ancrage.

1 votes

Id et name en html5 peuvent contenir n'importe quel caractère sauf un espace, mais doivent avoir au moins un caractère : w3.org/TR/html5/dom.html#the-id-attribute

24voto

Ishmael Points 5993

El name n'est pas unique. Par exemple, il est utilisé pour regrouper les boutons radio. Il représente la valeur d'une propriété particulière du formulaire. id doivent être uniques.

9voto

AlanBarber Points 802

L'ID doit être unique mais vous pouvez utiliser plusieurs éléments de formulaire avec le même NOM. C'est la norme pour le fonctionnement des boutons radio, de sorte que vous pouvez forcer une sélection d'un groupe de boutons radio.

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