Différence entre les attributs id et name en HTML

718

Quelle est la différence entre les attributs idet name? Ils semblent tous deux avoir le même objectif de fournir un identifiant.

Je voudrais savoir (en particulier en ce qui concerne les formulaires HTML) si l'utilisation des deux est nécessaire ou encouragée pour quelque raison que ce soit.

yogibear
la source
9
Il y a un très bon sujet sur ce sujet à stackoverflow.com/questions/7470268/html-input-name-vs-id
Richard Logwood

Réponses:

626

L' nameattribut est utilisé lors de l'envoi de données dans une soumission de formulaire. Différents contrôles répondent différemment. Par exemple, vous pouvez avoir plusieurs boutons radio avec des idattributs différents , mais identiques name. Lors de la soumission, il n'y a qu'une seule valeur dans la réponse - le bouton radio que vous avez sélectionné.

Bien sûr, il y a plus que cela, mais cela vous fera certainement réfléchir dans la bonne direction.

John Fisher
la source
Pourriez-vous s'il vous plaît décrire un peu plus à ce sujet .. Une fois soumis, il n'y a qu'une seule valeur dans la réponse - le bouton radio que vous avez sélectionné.
NoviceToDotNet
autre que le bouton radio y a-t-il une utilisation ?? Je pense que ça devrait avoir de grandes différences à part ça ???
Prageeth godage
28
@Prageeth: La différence est qu'un "nom" est transféré du navigateur au serveur et peut être différent de "l'id". Il y a de nombreuses raisons pour lesquelles les gens pourraient vouloir cette différence. Par exemple, votre langage / framework côté serveur peut avoir besoin des valeurs soumises pour avoir certains noms, mais votre javascript fonctionne mieux avec quelque chose de complètement différent dans les identifiants.
John Fisher
29
Pour le dire de manière très informelle, idc'est avec quoi votre frontend (CSS, JS) fonctionne, tandis que namec'est ce que votre serveur reçoit et peut ensuite traiter. C'est essentiellement ce que dit la réponse de Greeso.
Saraph
2
Il pourrait être préférable de dire: l' attribut de nom est requis lors de l'envoi de données ... au lieu de: l' attribut de nom est utilisé lors de l'envoi de données ... car les données de formulaire manquant l' attribut de nom ne seront pas transmises (ou en effet ne seront pas traité du tout selon les spécifications HTML)
ebyrob
332

Utilisez des nameattributs pour les contrôles de formulaire (tels que <input>et <select>), car il s'agit de l'identificateur utilisé dans l' appel POSTou GETqui se produit lors de la soumission du formulaire.

Utilisez des idattributs chaque fois que vous devez adresser un élément HTML particulier avec CSS, JavaScript ou un identifiant de fragment . Il est également possible de rechercher des éléments par nom, mais il est plus simple et plus fiable de les rechercher par ID.

Warren Young
la source
2
C'était extrêmement clair. Alors, pourrais-je en déduire, alors, que "nom" est presque une représentation du paramètre "identifiant" envoyé au serveur? Cette question trouve une réponse partielle dans la réponse acceptée mais n'est pas formulée en ces termes.
Thomas
5
@Thomas: Il n'y a pas de lien nécessaire entre nameet iddu tout. L'identifiant identifie de manière unique un élément HTML particulier sur la page. L' nameattribut d'un élément de formulaire HTML, en revanche, n'a pas à être unique, et ne l'est souvent pas, comme avec les boutons radio ou les pages avec plusieurs <form>éléments. Il est traditionnel d'utiliser la même chaîne pour nameet idoù les deux sont utilisés sur un seul élément HTML, mais rien ne vous y oblige.
Warren Young
J'implémente une zone de texte personnalisée qui peut interpréter un balisage html, j'ai utilisé une div contentEditable pour accomplir cela. Si vous lui ajoutez un attribut «nom», se comportera-t-il comme tel?
yev
126

Voici un bref résumé:

  • idest utilisé pour identifier l'élément HTML via le modèle d'objet de document (via JavaScript ou stylisé avec CSS). iddevrait être unique dans la page.

  • namecorrespond à l' élément de formulaire et identifie ce qui est renvoyé au serveur .

Mike Buckbee
la source
27

Voir ce http://mindprod.com/jgloss/htmlforms.html#IDVSNAME

Quelle est la différence? La réponse courte est, utilisez les deux et ne vous en faites pas. Mais si vous voulez comprendre cette maladresse, voici le maigre:

id = est destiné à être utilisé comme cible comme celui - ci: <some-element id="XXX"></some-element>pour des liens comme celui - ci: <a href="#XXX".

name = est également utilisé pour étiqueter les champs du message envoyé à un serveur avec un HTTP (HyperText Transfer Protocol) GET ou POST lorsque vous appuyez sur soumettre dans un formulaire.

id = étiquette les champs à utiliser par JavaScript et Java DOM (Document Object Model). Les noms dans name = doivent être uniques dans un formulaire. Les noms dans id = doivent être uniques dans tout le document.

Parfois, les noms name = et id = diffèrent, car le serveur attend le même nom de différentes formes dans le même document ou de divers boutons radio sous la même forme que dans l'exemple ci-dessus. L'id = doit être unique; le nom = ne doit pas l'être.

JavaScript avait besoin de noms uniques, mais il y avait déjà trop de documents sans nom = noms uniques, donc les gens de W3 ont inventé la balise id qui devait être unique. Malheureusement, les navigateurs plus anciens ne l'ont pas compris. Vous avez donc besoin des deux schémas de dénomination dans vos formulaires.

REMARQUE: l'attribut "nom" pour certaines balises comme <a>n'est pas pris en charge dans HTML5.

Roedy Green
la source
2
Un peu déroutant ... et je pense que mal sur certains points. N'est-ce pas: nameest important pour les <input>balises dans une <form>soumission car les paramètres sont utilisés dans le HTTP, et idn'est qu'un identifiant unique
Don Cheadle
En outre, cet utilisateur (non enregistré) établit un lien vers sa propre page (le lien sur son profil indique mindprod.com/jgloss ). Je ne sais pas si c'est un problème pour SO, mais étant donné l'extrait plutôt déroutant, cela semble inapproprié.
zb226
24

La façon dont j'y pense et l'utilise est simple:

id est utilisé pour CSS et JavaScript / jQuery (doit être unique dans une page)

Le nom est utilisé pour la gestion des formulaires en PHP lorsqu'un formulaire est soumis via HTML (doit être unique dans un formulaire - dans une certaine mesure, voir le commentaire de Paul ci-dessous)

Greeso
la source
2
Pas tout à fait vrai - l' attribut Name n'a pas besoin d'être unique dans un formulaire, car il peut lier les boutons radio entre eux.
Paul
4
Cela peut également vous surprendre, mais PHP n'est pas le seul langage serveur au monde.
voir plus net le
@seesharper - C'est drôle. Je t'ai même voté! Eh bien, oui, cela ne me surprend pas :)
Greeso
14

Tag ID - utilisé par CSS, définit une instance unique d'un div, d'une étendue ou d'autres éléments. Apparaît dans le modèle Javascript DOM, vous permettant d'y accéder avec divers appels de fonction.

Balise de nom pour les champs - Ceci est unique par formulaire - à moins que vous ne fassiez un tableau que vous souhaitez passer au traitement PHP / côté serveur. Vous pouvez y accéder via Javascript par son nom, mais je pense qu'il n'apparaît pas comme un nœud dans le DOM ou certaines restrictions peuvent s'appliquer (vous ne pouvez pas utiliser .innerHTML, par exemple, si je me souviens bien).

Extrakun
la source
9
les boutons radio doivent partager le même nom pour se comporter correctement - ce n'est pas unique par formulaire.
nickf
Mon erreur. Bien que pour clarifier, pour les entrées de texte, les zones de texte et etc., des balises de nom sont utilisées pour les identifier. Pas nécessairement unique.
Extrakun
12

Généralement, on suppose que le nom est toujours remplacé par id . Cela est vrai, dans une certaine mesure, mais pas pour les champs de formulaire et les noms de trame , pratiquement parlant. Par exemple, avec les éléments de formulaire, l' nameattribut est utilisé pour déterminer les paires nom-valeur à envoyer à un programme côté serveur et ne doit pas être éliminé. Browsers do not use id in that manner. Pour être sûr, vous pouvez utiliser les attributs name et id sur les éléments de formulaire. Donc, nous écririons ce qui suit:

<form id="myForm" name="myForm">
     <input type="text" id="userName" name="userName" />
</form>

Pour garantir la compatibilité, il est judicieux d'avoir des valeurs d'attribut name et id correspondantes lorsque les deux sont définies. Cependant, soyez prudent: certaines balises, en particulier les boutons radio, doivent avoir des valeurs de nom non uniques, mais nécessitent des valeurs d'ID uniques. Encore une fois, cela devrait faire référence au fait que l'id n'est pas simplement un remplacement pour le nom; ils ont un objectif différent. En outre, ne négligez pas l'approche à l'ancienne, un examen approfondi des bibliothèques modernes montre un tel style de syntaxe utilisé à des fins de performances et de facilité à certains moments. Votre objectif doit toujours être en faveur de la compatibilité.

Désormais, dans la plupart des éléments, l'attribut name a été déconseillé au profit de l'attribut id plus omniprésent. Cependant, dans certains cas, forme particulièrement les champs ( <button>, <input>, <select>et <textarea>), la vie d'attribut name parce qu'il continue d'être nécessaire pour définir la paire valeur de nom pour la soumission du formulaire. De plus, nous constatons que certains éléments, notamment les cadres et les liens, peuvent continuer à utiliser l'attribut name car il est souvent utile pour récupérer ces éléments par leur nom.

Il y a une distinction claire entre id et nom. Très souvent, lorsque le nom continue, nous pouvons définir les mêmes valeurs. Cependant, l'id doit être unique, et le nom dans certains cas ne devrait pas - pensez aux boutons radio. Malheureusement, l'unicité des valeurs id, bien que détectée par la validation du balisage, n'est pas aussi cohérente qu'elle devrait l'être. L'implémentation CSS dans les navigateurs stylisera les objets qui partagent une valeur id; ainsi, nous ne pouvons pas détecter les erreurs de balisage ou de style qui pourraient affecter notre JavaScript jusqu'à l'exécution.

Ceci est tiré du livre JavaScript- The Complete Reference by Thomas-Powell

Shirgill Farhan
la source
4
Une autre raison de ne pas prendre l'habitude de simplement faire le nom de l'identifiant: vous pouvez avoir deux formulaires sur une page qui doivent soumettre les mêmes données (par exemple deux champs de recherche). Dans ce cas, le namedoit être le même (le code côté serveur ne se soucie pas de ce qui a été soumis), mais le iddoit être différent (car il doit être unique dans toute la page).
IMSoP
10

nameest déconseillé pour les cibles de liens et non valide en HTML5. Il ne fonctionne plus au moins dans la dernière version de Firefox (v13). Remplacer <a name="hello">par<a id="hello">

La cible n'a pas besoin d'être une <a>balise, elle peut être <p id="hello"> ou <h2 id="hello">etc. ce qui est souvent un code plus propre.

Comme d'autres postes le disent clairement, nameest toujours utilisé (nécessaire) dans les formulaires. Il est également toujours utilisé dans les balises META.

user1454923
la source
Voulez-vous dire "le nom est déconseillé pour les balises de lien" au lieu de "le nom est déconseillé pour les cibles de lien"? En fait, la cible du lien peut être un iframe. Si vous ne spécifiez pas l'attribut de nom pour cette iframe, l'attribut cible ne fonctionne pas pour le lien. Ce comportement reste immobile pour tous les navigateurs et est compatible HTML5.
yucer
J'essaie ici de comprendre comment faire un lien d' ancrage , comme dans le marqueur pour savoir où vous allez à quand vous avez une URL qui se termine par « #something ». du mieux que je puisse dire, en html avant 4, ce doit être <a name="something">. En html 4, c'est <a name="something" id="something"> (correspondance), et en html 5, <a id="something">, bien que id puisse être un "attribut global" sur n'importe quoi. Ce que je ne peux pas comprendre, c'est si le nom en plus de l'ID est toléré dans <a> en html 5. OK expérience quelle que soit la configuration que j'ai ...
FutureNerd
9
<form action="demo_form.asp">
<label for="male">Male</label>
<input type="radio" name="sex" id="male" value="male"><br>
<label for="female">Female</label>
<input type="radio" name="sex" id="female" value="female"><br>
<input type="submit" value="Submit">
</form>
Hongtao
la source
6

name Vs id

Nom

  • Nom de l'élément. Par exemple, utilisé par le serveur pour identifier les champs dans les formulaires soumis.
  • Les éléments de support sont <button>, <form>, <fieldset>, <iframe>, <input>, <keygen>, <object>, <output>, <select>, <textarea>, <map>, <meta>, <param>
  • Le nom ne doit pas nécessairement être unique.

id

  • Souvent utilisé avec CSS pour styliser un élément spécifique. La valeur de cet attribut doit être unique.
  • Id est des attributs globaux , ils peuvent être utilisés sur tous les éléments, bien que les attributs puissent n'avoir aucun effet sur certains éléments.
  • Doit être unique dans tout le document.
  • La valeur de cet attribut ne doit pas contenir d'espaces blancs, contrairement à l'attribut class, qui autorise les valeurs séparées par des espaces.
  • Utilisation de caractères à l'exception des lettres et des chiffres ASCII, «_», «-» et «.» peut entraîner des problèmes de compatibilité, car ils n'étaient pas autorisés dans HTML 4. Bien que cette restriction ait été levée dans HTML 5, un ID doit commencer par une lettre de compatibilité.
Subodh Ghulaxe
la source
J'ai vu des nameattributs utilisés dans les éléments de style. Je suppose que ce n'est pas valide?
Synetech
5

L'ID d'un élément d'entrée de formulaire n'a rien à voir avec les données contenues dans l'élément. Les ID servent à accrocher l'élément avec JavaScript et CSS. L'attribut name, cependant, est utilisé dans la requête HTTP envoyée par votre navigateur au serveur en tant que nom de variable associé aux données contenues dans l'attribut value.

Par exemple:

<form>
    <input type="text" name="user" value="bob">
    <input type="password" name="password" value="abcd1234">
</form>

Lorsque le formulaire est soumis, les données du formulaire seront incluses dans l'en-tête HTTP comme ceci:

Si vous ajoutez un attribut ID, cela ne changera rien dans l'en-tête HTTP. Cela facilitera simplement son accrochage avec CSS et JavaScript.

orbite
la source
2

Si vous n'utilisez pas la propre méthode d'envoi du formulaire pour envoyer des informations à un serveur (et que vous le faites à la place à l'aide de javascript), vous pouvez utiliser l'attribut name pour attacher des informations supplémentaires à une entrée - plutôt comme l'associer à une valeur d'entrée masquée, mais semble plus propre car il est intégré à l'entrée.

Ce bit fonctionne toujours actuellement dans Firefox, mais je suppose qu'à l'avenir, il pourrait ne pas être autorisé à passer.

Vous pouvez avoir plusieurs champs de saisie avec la même valeur de nom, tant que vous ne prévoyez pas de soumettre à l'ancienne.

Jon Bray
la source
1

Basé sur des expériences personnelles et selon la description des écoles W3 pour les attributs:

L'ID est un attribut global et s'applique à pratiquement tous les éléments en HTML. Il est utilisé pour identifier de manière unique les éléments de la page Web, et sa valeur est principalement accessible à partir du frontend (généralement via JavaScript ou jQuery).

nom est un attribut utile à des éléments spécifiques (tels que des éléments de formulaire, etc.) en HTML. Sa valeur est principalement envoyée au backend pour traitement.

https://www.w3schools.com/tags/ref_attributes.asp

Kojugart
la source
0

Voici une utilisation intéressante de l'attribut id. Il est utilisé dans la balise et utilisé pour identifier le formulaire pour les éléments en dehors des limites afin qu'ils soient inclus dans les autres champs du formulaire.

 <form action="action_page.php" id="form1">
 First name: <input type="text" name="fname"><br>
 <input type="submit" value="Submit">
 </form>

 <p>The "Last name" field below is outside the form element, but still part of the form.</p>
 Last name: <input type="text" name="lname" form="form1">
Ruisseau
la source
0

Id: 1) Il est utilisé pour identifier l'élément HTML via le modèle d'objet de document (via Javascript ou stylisé avec CSS). 2) L'ID devrait être unique sur la page.

Le nom correspond à l'élément de formulaire et identifie ce qui est renvoyé sur le serveur. Exemple :

<form action="action_page.php" id="Myform">
 First name: <input type="text" name="FirstName"><br>
 <input type="submit" value="Submit">
 </form>

 <p>The "Last name" field below is outside the form element, but still part of the form.</p>
 Last name: <input type="text" name="LastName" form="Myform">
Waqas Ahmed
la source
0

L'ID est utilisé pour identifier de manière unique un élément.

Le nom est utilisé dans les formulaires. Bien que vous soumettiez un formulaire, si vous ne donnez aucun nom, rien ne sera soumis. Par conséquent, les éléments de formulaire ont besoin d'un nom pour être identifiés par des méthodes de formulaire comme "get or push".

Et ceux qui n'ont qu'un attribut de nom s'éteindront.

Viyaan Jhiingade
la source
0

Le iddonnera un élément un identifiant, donc une fois que vous écrivez du vrai code, (comme JavaScript), vous pouvez utiliser l'id pour lire les éléments. C'est namejuste un nom pour que l'utilisateur puisse voir le nom de l'élément, je suppose.

Exemple:

<h1 id="heading">text</h1>
<script>
  document.getElementById("heading"); //Reads the element that has the id "heading".
</script>
//You can also use something like this:
document.getElementById("heading").value; //Reads the value of the selected element.

Est-ce utile? Faites-moi savoir s'il y a des problèmes.

Dangerousgame
la source
0

Il n'y a pas de différence littérale entre un identifiant et un nom.

Le nom est l'identifiant et est utilisé dans la requête http envoyée par le navigateur au serveur comme nom de variable associé aux données contenues dans l'attribut value de l'élément.

L'ID, d'autre part, est un identifiant unique pour le navigateur, le côté client et le formulaire JavaScript.

id est plus spécifiquement utilisé pour ajouter des attributs à des éléments uniques. Dans les méthodes DOM, Id est utilisé en Javascript pour référencer l'élément spécifique sur lequel votre action doit avoir lieu.

Par exemple:

<html>
<body>

<h1 id="demo"></h1>

<script>
document.getElementById("demo").innerHTML = "Hello World!";
</script>
</body>
</html>

La même chose peut être obtenue par l'attribut name, mais il est préférable d'utiliser id dans le formulaire et le nom pour les petits éléments de formulaire comme la balise d'entrée ou la balise select.

addy
la source