Różnica między atrybutami id i name w HTML


715

Jaka jest różnica między atrybutami ida name? Oba wydają się służyć temu samemu celowi, jakim jest dostarczenie identyfikatora.

Chciałbym wiedzieć (szczególnie w odniesieniu do formularzy HTML), czy korzystanie z obu jest konieczne lub zalecane z jakichkolwiek powodów.


Odpowiedzi:


624

nameAtrybut jest używany podczas wysyłania danych w przedłożeniu formularza. Różne elementy sterujące reagują inaczej. Na przykład możesz mieć kilka przycisków opcji o różnych idatrybutach, ale takich samych name. Po przesłaniu w odpowiedzi jest tylko jedna wartość - wybrany przycisk opcji.

Oczywiście jest w tym coś więcej, ale na pewno sprawi, że zaczniesz myśleć we właściwym kierunku.


czy mógłbyś opisać trochę więcej na ten temat .. Po przesłaniu w odpowiedzi jest tylko jedna wartość - wybrany przycisk opcji.
— NoviceToDotNet

inne niż przycisk opcji, czy są jakieś zastosowania? Myślę, że powinny mieć inne wielkie różnice?
— Prageeth godage

27
@Prageeth: Różnica polega na tym, że „nazwa” przenosi się z przeglądarki na serwer i może być inna niż „id”. Istnieje wiele powodów, dla których ludzie mogą chcieć tej różnicy. Na przykład język / środowisko po stronie serwera może wymagać przesłanych wartości, aby mieć określone nazwy, ale skrypt javascript działa najlepiej z czymś zupełnie innym w identyfikatorach.
— John Fisher

28
Mówiąc bardzo nieformalnie, z idtym współpracuje twój frontend (CSS, JS), podczas gdy nameserwer odbiera i może następnie przetwarzać. Tak w zasadzie mówi odpowiedź Greeso.
— Saraph,

2
Lepiej byłoby powiedzieć: Atrybut nazwy jest wymagany podczas wysyłania danych ... zamiast: Atrybut nazwy jest używany podczas wysyłania danych ... ponieważ jakiekolwiek dane w formularzu, w których brakuje atrybutu nazwy , nie zostaną przesłane (lub faktycznie nie będą przetworzone w ogóle zgodnie ze specyfikacją HTML)
— ebyrob

330

Użyj nameatrybutów do kontrolek formularza (takich jak <input>i <select>), ponieważ jest to identyfikator użyty w wywołaniu POSTlub, GETktóre ma miejsce podczas przesyłania formularza.

Używaj idatrybutów, gdy potrzebujesz zaadresować określony element HTML za pomocą CSS, JavaScript lub identyfikatora fragmentu . Możliwe jest również wyszukiwanie elementów według nazwy, ale łatwiejsze i bardziej niezawodne jest wyszukiwanie ich według identyfikatora.


2
To było ogromne wyjaśnienie. Czy mogę zatem wnioskować, że ta „nazwa” jest prawie reprezentacją parametru „identyfikator” przesłanego na serwer? Odpowiedź na to pytanie częściowo odpowiada zaakceptowanej odpowiedzi, ale nie została ujęta w tych kategoriach.
— Thomas

5
@Thomas: Nie ma potrzeby tie między namei idw ogóle. Identyfikator jednoznacznie identyfikuje określony element HTML na stronie. Natomiast nameatrybut elementu formularza HTML nie musi być unikalny i często nie jest, na przykład w przypadku przycisków opcji lub stron z wieloma <form>elementami. Tradycyjnie używa się tego samego ciągu namei idgdzie oba są używane w jednym elemencie HTML, ale nic nie wymaga tego.
— Warren Young,

Wdrażam niestandardowy obszar tekstowy, który może interpretować niektóre znaczniki HTML, w tym celu użyłem div contentEditable. Jeśli dodasz do niego atrybut „name”, czy będzie się tak zachowywał?
— yev

124

Oto krótkie podsumowanie:

  • idsłuży do identyfikacji elementu HTML za pomocą modelu obiektowego dokumentu (przez JavaScript lub stylem CSS). idoczekuje się, że będzie unikalny na stronie.

  • nameodpowiada elementowi formularza i identyfikuje to, co jest wysyłane z powrotem na serwer .


27

Zobacz http://mindprod.com/jgloss/htmlforms.html#IDVSNAME

Co za różnica? Krótka odpowiedź brzmi: używaj obu i nie martw się o to. Ale jeśli chcesz zrozumieć tę głupotę, oto chuda:

ID = ma być stosowany jako cel w ten sposób: <some-element id="XXX"></some-element>dla łączy jak poniżej: <a href="#XXX".

name = służy również do oznaczania pól w wiadomości wysyłanej do serwera za pomocą HTTP (HyperText Transfer Protocol) GET lub POST po naciśnięciu przycisku przesyłania w formularzu.

id = oznacza pola do użycia przez JavaScript i Java DOM (Document Object Model). Nazwy w name = muszą być unikalne w formularzu. Nazwy w id = muszą być unikalne w całym dokumencie.

Czasami nazwy = i id = nazwy będą się różnić, ponieważ serwer oczekuje tej samej nazwy z różnych formularzy w tym samym dokumencie lub różnych przycisków opcji w tej samej formie, jak w powyższym przykładzie. Identyfikator = musi być unikalny; nazwa = nie może być.

JavaScript potrzebował unikalnych nazw, ale było już zbyt wiele dokumentów bez unikalnych nazw = nazw, więc ludzie z W3 wymyślili tag id, który był wymagany. Niestety starsze przeglądarki tego nie rozumiały. Potrzebujesz więc obu schematów nazewnictwa w swoich formularzach.

UWAGA: atrybut „name” dla niektórych tagów, takich jak, <a>nie jest obsługiwany w HTML5.


2
Trochę mylące ... i w niektórych punktach uważam, że źle. Czy nie jest to: namejest ważne dla <input>znaczników w <form>zgłoszeniu, ponieważ parametry są używane w HTTP, i idjest jedynie unikalnym identyfikatorem
— Don Cheadle

Ponadto ten (niezarejestrowany) użytkownik prowadzi do swojej strony (link w jego profilu mówi mindprod.com/jgloss ). Nie wiem, czy to problem dla SO, ale biorąc pod uwagę dość mylący fragment, wydaje się nieodpowiedni.
— zb226,

23

Sposób, w jaki o tym myślę i korzystam jest prosty:

identyfikator jest używany w CSS i JavaScript / jQuery (musi być unikalny na stronie)

nazwa jest używana do obsługi formularzy w PHP, gdy formularz jest przesyłany przez HTML (musi być unikalny w formularzu - do pewnego stopnia zobacz komentarz Pawła poniżej)


2
Nie do końca prawda - atrybut Nazwa nie musi być unikalny w formularzu, ponieważ może łączyć ze sobą przyciski opcji.
— Paweł,

4
Może cię to również zaskoczyć, ale PHP nie jest jedynym językiem serwera na świecie.
— patrz ostrzejszy

@seesharper - To zabawne. Głosowałem nawet za tobą! Cóż, tak, to mnie nie dziwi :)
— Greeso

14

Znacznik ID - używany przez CSS, definiuje unikalne wystąpienie div, span lub innych elementów. Pojawia się w modelu JavaScript DOM, umożliwiając dostęp do nich za pomocą różnych wywołań funkcji.

Tag nazwy dla pól - jest unikalny dla każdego formularza - chyba że wykonujesz tablicę, którą chcesz przekazać do przetwarzania PHP / po stronie serwera. Możesz uzyskać do niego dostęp przez Javascript według nazwy, ale myślę, że nie pojawia się on jako węzeł w DOM lub mogą obowiązywać pewne ograniczenia (nie możesz użyć .innerHTML, na przykład, jeśli dobrze pamiętam).


9
przyciski radiowe muszą mieć tę samą nazwę, aby zachowywać się poprawnie - nie jest to unikalne dla każdego formularza.
— nickf

Mój błąd. Choć dla wyjaśnienia, w przypadku wprowadzania tekstu, obszarów tekstowych itp. Do ich identyfikacji używane są tagi nazw. Nie jest konieczne unikalne.
— Extrakun

12

Ogólnie przyjmuje się, że nazwa jest zawsze zastępowana przez id . Jest to do pewnego stopnia prawdziwe, ale praktycznie nie dotyczy pól formularzy i nazw ram . Na przykład w przypadku elementów formularza nameatrybut służy do określania par nazwa-wartość, które mają zostać wysłane do programu po stronie serwera, i nie należy go eliminować. Browsers do not use id in that manner. Aby być bezpiecznym, możesz użyć atrybutów name i id w elementach formularza. Napiszemy więc:

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

Aby zapewnić zgodność, dobrym pomysłem jest posiadanie zgodnych wartości atrybutów nazwa i identyfikator, gdy są one zdefiniowane. Bądź jednak ostrożny - niektóre tagi, zwłaszcza przyciski opcji, muszą mieć nietypowe nazwy, ale wymagają unikalnych wartości identyfikatora. Raz jeszcze powinno to oznaczać, że identyfikator nie jest po prostu zamiennikiem nazwy; mają inny cel. Co więcej, nie pomijaj starego stylu, głębokie spojrzenie na współczesne biblioteki pokazuje taki styl składni używany czasami do celów wydajnościowych i łatwości. Twoim celem zawsze powinna być zgodność.

Teraz w większości elementów atrybut name został wycofany na korzyść bardziej wszechobecnego atrybutu id. Jednak w niektórych przypadkach, szczególnie tworząc pola ( <button>, <input>, <select>, i <textarea>), życie na atrybut name, ponieważ nadal jest wymagane, aby ustawić parę nazwa-wartość składania formularza. Ponadto okazuje się, że niektóre elementy, w szczególności ramki i łącza, mogą nadal używać atrybutu name, ponieważ często jest on przydatny do wyszukiwania tych elementów według nazwy.

Istnieje wyraźne rozróżnienie między identyfikatorem a nazwą. Bardzo często, gdy nazwa jest kontynuowana, możemy ustawić te same wartości. Jednak identyfikator musi być unikalny, a nazwa w niektórych przypadkach nie powinna - pomyśl przyciski radiowe. Niestety, wyjątkowość wartości identyfikacyjnych, choć wychwycona przez sprawdzanie poprawności znaczników, nie jest tak spójna, jak powinna być. Implementacja CSS w przeglądarkach będzie stylizować obiekty o wspólnej wartości id; dlatego nie możemy wyłapać błędów znaczników lub stylów, które mogłyby wpłynąć na nasz JavaScript do czasu uruchomienia.

To pochodzi z książki JavaScript- The Complete Reference by Thomas-Powell


4
Kolejny powód, dla którego nie należy nawiązywać zwyczajnego dopasowywania nazwy id: możesz mieć na stronie dwa formularze, które wymagają podania tych samych danych (np. Dwa pola wyszukiwania). W takim przypadku namepowinien być taki sam (kod po stronie serwera nie ma znaczenia, który został przesłany), ale idmusi być inny (ponieważ musi być unikalny na całej stronie).
— IMSoP

10

namejest przestarzałe dla celów linków i jest nieprawidłowe w HTML5. Nie działa już przynajmniej w najnowszej przeglądarce Firefox (v13). Zmień <a name="hello">na<a id="hello">

Cel nie musi być <a>tagiem, może być <p id="hello"> lub <h2 id="hello">itp., Co często jest czystszym kodem.

Jak wyraźnie mówią inne posty, namejest nadal używany (potrzebny) w formularzach. Jest nadal używany w tagach META.


Czy masz na myśli „nazwa jest przestarzała dla tagów linków” zamiast „nazwa jest przestarzała dla celów linków”? W rzeczywistości celem łącza może być element iframe. Jeśli nie określisz atrybutu name dla tego elementu iframe, atrybut docelowy nie będzie działał dla łącza. Zachowanie to nadal obowiązuje dla wszystkich przeglądarek i jest zgodne z HTML5.
— yumper

Ja tu próbuje dowiedzieć się, jak zrobić link kotwicy , jak w marker, gdzie udać się , gdy masz URL, który kończy się w „#something”. najlepiej, co mogę powiedzieć, w html przed 4, musi to być <a name="something">. W html 4 jest to <a name="something" id="something"> (pasujące), a w html 5 <a id="something">, chociaż id może być „globalnym atrybutem” na dowolny temat. Nie mogę ustalić, czy nazwa oprócz identyfikatora jest tolerowana w <a> w HTML 5. OK. Eksperymentuj w jakiejkolwiek konfiguracji, jaką miałem ...
— 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

imię

  • Nazwa elementu Na przykład używany przez serwer do identyfikacji pól w formularzach przesyłanych.
  • Elementy wspierające są <button>, <form>, <fieldset>, <iframe>, <input>, <keygen>, <object>, <output>, <select>, <textarea>, <map>, <meta>, <param>
  • Nazwa nie musi być unikalna.

ID

  • Często używany z CSS do stylizowania określonego elementu. Wartość tego atrybutu musi być unikalna.
  • Id to Globalne atrybuty , można ich używać we wszystkich elementach, chociaż atrybuty mogą nie mieć wpływu na niektóre elementy.
  • Musi być unikalny w całym dokumencie.
  • Wartość tego atrybutu nie może zawierać białych spacji, w przeciwieństwie do atrybutu class, który pozwala na wartości oddzielone spacją.
  • Używanie znaków oprócz liter i cyfr ASCII, „_”, „-” i „.” może powodować problemy ze zgodnością, ponieważ nie były one dozwolone w HTML 4. Chociaż ograniczenie to zostało zniesione w HTML 5, identyfikator powinien zaczynać się od litery oznaczającej zgodność.

Widziałem nameatrybuty używane w elementach stylu. Zakładam, że to jest nieprawidłowe?
— Synetech

5

Identyfikator elementu wejściowego formularza nie ma nic wspólnego z danymi zawartymi w elemencie. Identyfikatory służą do zaczepiania elementu za pomocą JavaScript i CSS. Jednak atrybut name jest wykorzystywany w żądaniu HTTP wysyłanym przez przeglądarkę do serwera jako nazwa zmiennej powiązana z danymi zawartymi w atrybucie value.

Na przykład:

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

Po przesłaniu formularza dane formularza zostaną uwzględnione w nagłówku HTTP w następujący sposób:

Dodanie atrybutu ID nie zmieni niczego w nagłówku HTTP. Ułatwi to połączenie CSS i JavaScript.


2

Jeśli nie używasz własnej metody przesyłania formularza do wysyłania informacji na serwer (a zamiast tego używasz javascript), możesz użyć atrybutu name, aby dołączyć dodatkowe informacje do danych wejściowych - raczej jak powiązanie ich z ukrytą wartością wejściową, ale wygląda ładniej, ponieważ jest włączony do wejścia.

Ten bit nadal działa w Firefoksie, ale przypuszczam, że w przyszłości może nie zostać udostępniony.

Możesz mieć wiele pól wejściowych o tej samej wartości nazwy, o ile nie planujesz przesłać w staromodny sposób.


1

Na podstawie osobistych doświadczeń i zgodnie z opisem W3 Schools dla atrybutów:

ID jest atrybutem globalnym i dotyczy praktycznie wszystkich elementów HTML. Służy do jednoznacznej identyfikacji elementów na stronie internetowej, a do jego wartości można uzyskać dostęp głównie z poziomu interfejsu użytkownika (zwykle przez JavaScript lub jQuery).

nazwa jest atrybutem przydatnym dla określonych elementów (takich jak elementy formularza itp.) w HTML. Jego wartość jest najczęściej wysyłana do zaplecza w celu przetworzenia.

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


0

Poniżej znajduje się interesujące użycie atrybutu id. Jest on używany w znaczniku i służy do identyfikacji formularza dla elementów poza granicami, dzięki czemu zostaną one dołączone do innych pól w formularzu.

 <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) Służy do identyfikacji elementu HTML za pomocą modelu obiektowego dokumentu (poprzez Javascript lub stylizowany za pomocą CSS). 2) Oczekuje się, że identyfikator będzie unikalny na stronie.

Nazwa odpowiada elementowi formularza i identyfikuje to, co jest wysyłane z powrotem na serwer. Przykład:

<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

Identyfikator służy do jednoznacznej identyfikacji elementu.

Nazwa jest używana w formularzach. Chociaż prześlesz formularz, jeśli nie podasz żadnego imienia, nic nie zostanie przesłane. Dlatego elementy formularza wymagają nazwy, aby można je było zidentyfikować za pomocą metod takich jak „get or push”.

I wyjdą tylko te z atrybutem nazwy.


0

idDa element id, więc raz piszesz prawdziwy kod, (jak JavaScript) można użyć identyfikatora czytać elementy. To nametylko nazwa, więc użytkownik może zobaczyć nazwę elementu, tak myślę.

Przykład:

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

Czy to jest pomocne? Daj mi znać, jeśli są jakieś problemy.


0

Nie ma żadnej dosłownej różnicy między identyfikatorem a nazwą.

nazwa jest identyfikatorem i jest używana w żądaniu HTTP wysyłanym przez przeglądarkę do serwera jako nazwa zmiennej powiązana z danymi zawartymi w atrybucie wartości elementu.

Z drugiej strony identyfikator jest unikalnym identyfikatorem przeglądarki, strony klienta i JavaScript, dlatego formularz potrzebuje identyfikatora, a jego elementy wymagają nazwy.

id jest bardziej konkretnie używany w dodawaniu atrybutów do unikalnych elementów. W metodach DOM identyfikator jest używany w JavaScript do odniesienia do określonego elementu, na którym ma się odbywać akcja.

Na przykład:

<html>
<body>

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

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

To samo można osiągnąć za pomocą atrybutu name, ale preferuje się używanie id w formie i nazwie dla małych elementów formularza, takich jak tag wejściowy lub tag select.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.