Різниця між атрибутами id та імені в HTML


715

Яка різниця між idname атрибутами та атрибутами? Вони, здається, обидва служать одній і тій же цілі надання ідентифікатора.

Мені хотілося б знати (зокрема, що стосується форм HTML), чи потрібно використання обох з будь-яких причин.


9
Існує дуже хороший потік по цій темі на stackoverflow.com/questions/7470268/html-input-name-vs-id
Річард кампешевого

Відповіді:


624

nameАтрибут використовується при передачі даних через тире. Різні органи управління реагують по-різному. Наприклад, у вас може бути кілька перемикачів з різними idатрибутами, але однакові name. При надходженні у відповіді є лише одне значення - вибрана радіо кнопка.

Звичайно, в цьому є більше, але це обов'язково змусить вас задуматися в правильному напрямку.


Скажіть, будь ласка, детальніше на ньому. Коли ви надсилаєте, у відповіді є лише одне значення - вибрана перемикач.
NoviceToDotNet

крім перемикача чи є використання ?? Я думаю, що це має бути великі відмінності, крім цього ???
Прагетський бог

27
@Prageeth: Різниця полягає в тому, що "ім'я" передається з браузера на сервер і може відрізнятися від "id". Є багато причин, чому люди можуть захотіти такої різниці. Наприклад, для вашого сервера мова / фреймворк може потребувати поданих значень, щоб мати певні імена, але ваш JavaScript найкраще працює з чимось зовсім іншим в ідентифікаторах.
Джон Фішер

28
Якщо говорити неформально, idце те, з чим працює ваш інтерфейс (CSS, JS), а nameваш сервер отримує та може потім обробляти. Це, в основному, відповідь Гресо.
Сараф

2
Можливо, буде краще сказати: атрибут імені потрібен при надсиланні даних ... замість: атрибут імені використовується при надсиланні даних ... оскільки будь-які дані форми, у яких відсутній атрибут імені , не передаватимуться (або справді не будуть оброблено взагалі відповідно до специфікації HTML)
ebyrob

330

Використовуйте nameатрибути для елементів управління формами (наприклад, <input>та <select>), оскільки це ідентифікатор, який використовується в POSTабо GETвиклику, що відбувається під час подання форми.

Використовуйте idатрибути, коли потрібно звертатися до певного елемента HTML за допомогою CSS, JavaScript або ідентифікатора фрагмента . Можна також шукати елементи за назвою, але простіше і надійніше шукати їх за ідентифікатором.


2
Це було надзвичайно уточнююче. Тож, чи можу я зробити висновок, що "ім'я" - це майже представлення параметра "ідентифікатор", надісланого на сервер? На це питання частково відповідає прийнята відповідь, але це не ставиться в цих термінах.
Томас

5
@Thomas: Немає необхідного зв’язку між собою nameі idзовсім. Ідентифікатор однозначно ідентифікує певний елемент HTML на сторінці. nameАтрибут елемента форми HTML, навпаки, не повинні бути унікальними, і часто це не так , наприклад, з допомогою перемикачів або сторінок з кількома <form>елементами. Традиційно використовувати один і той же рядок nameі для того, idде обидва використовуються в одному елементі HTML, але нічого не змушує вас це робити.
Воррен Янг

Я реалізую власну textarea, яка може інтерпретувати деяку розмітку HTML, для цього я використовував ContentEditable div. Якщо додати до нього атрибут 'name', чи поводитиметься він як такий?
єв

124

Ось короткий підсумок:

  • idвикористовується для ідентифікації елемента HTML через модель об'єкта документа (через JavaScript або стилі CSS). idочікується, що він буде унікальним у межах сторінки.

  • nameвідповідає елементу форми і ідентифікує те, що розміщено назад на сервері .


27

Дивіться це http://mindprod.com/jgloss/htmlforms.html#IDVSNAME

Яка різниця? Коротка відповідь: використовуйте і те, і не хвилюйтеся з цього приводу. Але якщо ви хочете зрозуміти цю підступність, ось худий:

id = призначений для використання в якості такої цілі: <some-element id="XXX"></some-element>для таких посилань:<a href="#XXX" .

name = також використовується для позначення полів у повідомленні, надісланому серверу з протоколом HTTP (HyperText Transfer Protocol) GET або POST, коли ви натискаєте надіслати форму.

id = позначає поля для використання JavaScript і Java DOM (Модель об'єкта документа). Імена в name = повинні бути унікальними у формі. Імена в id = повинні бути унікальними у всьому документі.

Іноді ім’я = і id = імена будуть відрізнятися, оскільки сервер очікує того ж імені від різних форм у тому ж документі або різних перемикачів у тій же формі, що і в наведеному вище прикладі. Ідентифікатор = повинен бути унікальним; ім'я = не повинно бути.

JavaScript потребував унікальних імен, але тут було занадто багато документів без унікального імені = імен, тому люди W3 винайшли тег id, який повинен був бути унікальним. На жаль, старші браузери цього не розуміли. Тож вам потрібні обидві схеми іменування у ваших формах.

ПРИМІТКА: атрибут "name" для деяких тегів, таких як <a>, не підтримується в HTML5.


2
Трохи заплутано ... і я думаю, що в деяких моментах неправильно. Чи не це: nameважливо для <input>тегів у <form>поданні, оскільки параметри використовуються в HTTP, і idце лише унікальний ідентифікатор
Don Cheadle

Також цей (незареєстрований) користувач посилається на свою власну сторінку (посилання у його профілі говорить mindprod.com/jgloss ). Я не знаю, чи це проблема для ТА, але, враховуючи досить заплутаний фрагмент, він виглядає невідповідним.
zb226

23

Те, як я думаю про це і використовую його, просте:

ід використовується для CSS та JavaScript / jQuery (має бути унікальним на сторінці)

ім'я використовується для обробки форми в PHP, коли форма подається через HTML (має бути унікальною у формі - певною мірою див . коментар Павла нижче)


2
Не зовсім вірно - атрибут Name не повинен бути унікальним за формою, оскільки він може пов'язувати між собою перемикачі.
Пол

4
Також це може вас здивувати, але PHP - не єдина мова сервера в світі.
див. Різкіше

@seesharper - Це смішно. Я навіть проголосував за вас! Ну так, це мене не дивує :)
Greeso

14

Ідентифікаційний тег - використовується CSS, визначає унікальний примірник div, span або інших елементів. З'являється у моделі Javascript DOM, що дозволяє отримувати доступ до них за допомогою різних дзвінків функцій.

Тег імен для полів - Це унікально для кожної форми - якщо ви не робите масив, який ви хочете передати на PHP / обробку на стороні сервера. Ви можете отримати доступ до нього через Javascript за назвою, але я думаю, що він не відображається як вузол у DOM або можуть застосовуватися деякі обмеження (ви не можете використовувати .innerHTML, наприклад, якщо я пам'ятаю правильно).


9
радіо кнопки повинні мати те саме ім’я, щоб правильно поводитися - це не унікально для кожної форми.
nickf

Моя помилка. Хоча для уточнення, для введення тексту, текстових областей тощо, теги імен використовуються для їх ідентифікації. Не обов’язково унікальне.
Екстракун

12

Як правило, передбачається, що ім’я завжди замінюється id . Це, правда, певною мірою, але не для полів форм та імен кадру , практично кажучи. Наприклад, з елементами форми nameатрибут використовується для визначення пар імен-значень, що надсилаються програмі на стороні сервера, і не повинен бути усунутий. Browsers do not use id in that manner. Щоб бути захищеним, ви можете використовувати атрибути ім'я та ідентифікатора на елементах форми. Отже, ми б написали наступне:

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

Для забезпечення сумісності хороша ідея мати відповідність значень атрибутів імені та id, коли обидва визначені. Однак будьте обережні - деякі теги, зокрема перемикачі, повинні мати неоднозначні значення імен, але вимагати унікальних значень ідентифікатора.Знову ж таки, це повинно посилатися, що id - це не просто заміна імені; вони різні за призначенням. Крім того, не варто оминати підхід у старому стилі, глибокий погляд на сучасні бібліотеки показує такий стиль синтаксису, який використовується часом для виконання та полегшення. Ваша мета завжди повинна підтримувати сумісність.

Тепер у більшості елементів атрибут імені застарілий на користь більш повсюдного атрибута id. Однак, в деяких випадках, в зокрема , утворюють поля ( <button>, <input>, <select>і <textarea>), ім'я атрибута життя, тому що по- , як і раніше потрібно , щоб встановити пару ім'я-значення для подання форми. Крім того, ми виявляємо, що деякі елементи, зокрема рамки та посилання, можуть продовжувати використовувати атрибут name, оскільки це часто корисно для отримання цих елементів по імені.

Існує чітка відмінність між id і іменем. Дуже часто, коли ім’я продовжується, ми можемо встановлювати однакові значення. Однак ідентифікатор повинен бути унікальним, а ім’я в деяких випадках не повинно - думати радіо кнопки. На жаль, унікальність значень id, захоплена під час перевірки розмітки, не така послідовна, як повинна бути. Реалізація CSS у веб-переглядачах буде стилювати об’єкти, які мають спільне значення ідентифікатора; Таким чином, ми можемо не зафіксувати помилки розмітки чи стилю, які можуть впливати на наш JavaScript до часу виконання.

Це взято з книги JavaScript- The Complete Reference by Thomas-Powell


4
Ще одна причина, щоб не звикати просто вводити ім’я збігу ідентифікаторів: у вас можуть бути дві форми на сторінці, для яких потрібно подати однакові дані (наприклад, два поля пошуку). У цьому випадку nameмає бути те саме (код на стороні сервера не має значення, який був поданий), але він idповинен бути іншим (тому що він повинен бути унікальним на всій сторінці).
IMSoP

10

nameзастаріла для цілей посилань і недійсна в HTML5. Він більше не працює принаймні в останньому Firefox (v13). Змінити <a name="hello">на<a id="hello">

Ціль не повинен бути <a>тегом, це може бути <p id="hello"> або <h2 id="hello">т.д., що часто є чистішим кодом.

Як чітко говорять інші пости, nameвін все ще використовується (потрібен) у формах. Він все ще використовується в тегах META.


Ви маєте на увазі "назву застаріло для тегів посилань" замість "назву застаріло для цілей посилань"? Власне кажучи, ціль посилання може бути рамкою кадрів. Якщо ви не вказали атрибут імені для цього iframe, цільовий атрибут не працює для посилання. Така поведінка залишається для всіх браузерів і сумісна з HTML5.
Юсер

Я тут намагаюся з'ясувати , як зробити посилання на якір , як в маркер , де ви йдете , щоб , коли у вас є URL , який закінчується в «#something». найкраще, що я можу сказати, у html до 4, це повинно бути <a name="something">. У html 4 це <a name="something" id="something"> (відповідність), а в html 5 <a id="something">, хоча id може бути "глобальним атрибутом" у будь-якому. Що я не можу зрозуміти, чи є ім'я на додаток до ідентифікатора є переносилася в <a> в HTML 5. ОК експеримент ж все , що настройки я , трапляється, є ...
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>


6

name Vs id

назва

  • Назва елемента. Наприклад, сервер використовується для ідентифікації полів у формі подання.
  • Опорні елементи є <button>, <form>, <fieldset>, <iframe>, <input>, <keygen>, <object>, <output>, <select>, <textarea>, <map>, <meta>, <param>
  • Ім'я не повинно бути унікальним.

ід

  • Часто використовується з CSS для стилізації певного елемента. Значення цього атрибута повинно бути унікальним.
  • Id - атрибути Global , їх можна використовувати на всіх елементах, хоча атрибути можуть не впливати на деякі елементи.
  • Повинно бути унікальним у всьому документі.
  • Значення цього атрибута не повинно містити пробілів на відміну від атрибута класу, який дозволяє розділяти пробіли значення.
  • Використання символів, крім букв та цифр ASCII, '_', '-' і '.' може спричинити проблеми сумісності, оскільки їх не було дозволено в HTML 4. Хоча це обмеження було знято в HTML 5, ідентифікатор повинен починатися з літери для сумісності.

Я бачив nameатрибути, які використовуються в елементах стилю. Я припускаю, що це недійсно?
Synetech

5

Ідентифікатор елемента введення форми не має нічого спільного з даними, що містяться в елементі. Ідентифікатори призначені для підключення елемента за допомогою JavaScript та CSS. Однак атрибут імені використовується в HTTP-запиті, що надсилається вашим браузером на сервер як ім'я змінної, пов'язане з даними, що містяться в атрибуті значення.

Наприклад:

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

Після подання форми дані форми будуть включені до заголовка HTTP так:

Якщо ви додасте атрибут ID, він нічого не змінить у заголовку HTTP. Просто буде простіше підключити його за допомогою CSS та JavaScript.


2

Якщо ви не використовуєте власний метод подання форми для надсилання інформації на сервер (і замість цього робите це за допомогою JavaScript), ви можете використовувати атрибут name, щоб приєднати додаткову інформацію до вводу - скоріше, як поєднання її із прихованим вхідним значенням, але виглядає акуратніше, тому що він включений у вхід.

Цей біт досі працює у Firefox, хоча, мабуть, у майбутньому він може не отримати доступ.

Ви можете мати кілька полів введення з однаковим значенням імені, якщо ви не плануєте подавати старомодний спосіб.


1

На основі особистого досвіду та відповідно до опису W3 Schools для ознак:

Ідентифікатор - це глобальний атрибут і застосовується практично до всіх елементів у HTML. Він використовується для однозначної ідентифікації елементів на веб-сторінці, і до її значення здебільшого можна отримати доступ через інтерфейс (як правило, через JavaScript або jQuery).

name - це атрибут, який корисний конкретним елементам (таким як елементи форми тощо) у HTML. Її значення здебільшого надсилаються в бекенд-сервер для обробки.

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


0

Нижче представлено цікаве використання атрибута id. Він використовується в тезі і використовується для ідентифікації форми для елементів поза межами кордонів, щоб вони були включені до інших полів форми.

 <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">

0

Id: 1) Він використовується для ідентифікації елемента HTML через модель об'єкта документа (через Javascript або стилі CSS). 2) Ідентифікатор, як очікується, буде унікальним на сторінці.

Назва відповідає елементу форми і визначає, що розміщено назад на сервері. Приклад:

<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">

0

Ідентифікатор використовується для унікальної ідентифікації елемента.

Ім'я використовується у формах. Хоча ви подаєте форму, якщо ви не дасте імені, нічого не буде подано. Отже, елементам форми потрібна назва, щоб визначитись методами форми, такими як "отримати або натиснути".

І вийдуть ті, лише атрибут імені.


0

idДасть елемент а ідентифікатор, так як тільки ви пишете реальний код, (наприклад , JavaScript) , ви можете використовувати ідентифікатор для читання елементів. Це nameпросто ім'я, щоб користувач міг бачити ім'я елемента, я думаю.

Приклад:

<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.

Це корисно? Повідомте мене, якщо є якісь проблеми.


0

Немає буквальної різниці між ідентифікатором та іменем.

ім'я є ідентифікатором і використовується в запиті http, що надсилається браузером на сервер як ім'я змінної, пов'язане з даними, що містяться в атрибуті значення елемента.

Ідентифікатор з іншого боку - це унікальний ідентифікатор для веб-переглядача, клієнта та JavaScript. Отже, формі потрібен ідентифікатор, а його елементам потрібне ім’я.

id більш конкретно використовується при додаванні атрибутів до унікальних елементів. У методах DOM Id використовується в Javascript для посилання на конкретний елемент, на який потрібно виконати вашу дію.

Наприклад:

<html>
<body>

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

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

Те ж саме можна досягти за атрибутом name, але бажано використовувати id у формі та назви для малих елементів форми, таких як вхідний тег або тег вибору.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.