Je me souviens d'avoir lu dans la spécification une fois que l'attribut id
et l'attribut name
partagent le même espace de noms et doivent être uniques. Désormais, j'ai toujours essayé de répondre à cette exigence dans mes applications, redoutant même de donner le même id
et name
au même élément.
Mais récemment, j'ai commencé à travailler avec ASP.NET MVC 3, et il (comme PHP) peut utiliser le même attribut name
sur plusieurs contrôles d'entrée pour former une collection de valeurs côté serveur. J'ai essayé de rechercher la section pertinente dans la spécification - mais je ne l'ai pas trouvée. Peut-être ai-je alors mal compris quelque chose ou lu la mauvaise documentation?
Comment est-ce alors? Je veux produire un HTML aussi valide que possible (4.01 et 5 dans différentes applications). Puis-je utiliser cette astuce sans crainte? Ou devrais-je violer quelque chose et devrais-je mieux m'en tenir à des valeurs uniques?
L'attribut name
n'est valide que sur le <form>
et les éléments de formulaire (<input>
, <textarea>
et <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é, il soumettra foo=1
. Dans le DOM, vous pouvez référencer des éléments de formulaire à partir de form.elements
collection en spécifiant name
comme index. Si name
n'est pas unique, la collection renvoie un tableau d'éléments plutôt que l'élément. Prise en charge du DOM moderne en recherchant 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é.
L'attribut id
provient du monde XML et est un identifiant unique pour n'importe quel nœud, pas seulement pour les éléments de formulaire. Contrairement à l'attribut name
, il est valide sur n'importe quel nœud HTML. Tout comme l'attribut name
, il doit suivre les règles d'identification valides. L'identifiant doit commencer par un alpha et contenir uniquement alpha ([a-zA-Z]
), nombres, tiret, trait de soulignement et deux-points (notez qu'ASP.NET enfreint cette règle en démarrant les ID réservés avec un trait de soulignement - ainsi ils échoueront toujours un lint HTML/XML - en fait, certains proxys les suppriment). Pour rechercher un élément HTML par id
, vous utilisez:
document.getElementById(idvalue)
cela ne renvoie qu'un seul nœud DOM.
L'attribut name
n'est pas unique. Par exemple, il est utilisé pour regrouper les boutons radio. Il représente la valeur d'une propriété de formulaire particulière. id
s doit être unique.
L'ID doit être unique, mais vous pouvez utiliser plusieurs éléments de formulaire avec le même NOM. Ceci est standard pour le fonctionnement des boutons radio afin que vous puissiez forcer une sélection d'un groupe de boutons radio.