web-dev-qa-db-ja.com

名前属性はHTMLドキュメント内で一意である必要がありますか?

id属性とname属性の両方が同じ名前空間を共有し、一意でなければならないことを一度仕様書で読んだことを覚えています。以降、アプリケーションでこの要件を常に満たそうとして、同じidnameを同じ要素に与えることさえ恐れています。

しかし、最近、ASP.NET MVC 3の使用を開始しました(PHPのように)複数の入力コントロールで同じname属性を使用して、サーバー側で値のコレクションを形成できます。仕様の関連セクションを検索しようとしましたが、見つかりませんでした。おそらく私は何かを誤解したか、間違ったドキュメントを読んだのでしょうか?

それではどうですか?可能な限り有効なHTMLを作成したい(異なるアプリで4.01と5の両方)。このトリックを恐れずに使用できますか?それとも私は何かに違反しているのでしょうか、そしてユニークな価値に固執するべきですか?

56
Vilx-

name属性は、<form>およびフォーム要素(<input><textarea>および<select>)でのみ有効です。 nameを指定して、フォーム投稿で送信される名前/値のペアに関連付けるために使用されます。

例えば:

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

オンにすると、foo=1が送信されます。 DOMでは、nameをインデックスとして指定することにより、form.elementsコレクションからフォーム要素を参照できます。 nameが一意でない場合、コレクションは要素ではなく要素の配列を返します。最新のDOMは、次のようにフォーム要素を名前で検索することをサポートしています

 document.getElementsByName(nameValue)

注:要素が1つしか見つからない場合でも、常に配列を返します。

id属性はXMLの世界からのものであり、フォーム要素だけでなく、ノードの一意のIDです。 name属性とは異なり、すべてのHTMLノードで有効です。 name属性と同様に、有効な識別子規則に従う必要があります。識別子はアルファで始まり、アルファ([a-zA-Z])、数字、ハイフン、アンダースコア、コロンのみを含む必要があります(ASP.NETは予約済みIDをアンダースコアで開始することでこの規則に違反することに注意してください。したがって、常にHTMLに失敗します)/XML lint-実際にはいくつかのプロキシがそれらを取り除きます)。 idでHTML要素を見つけるには、次を使用します。

document.getElementById(idvalue)

これは1つのDOMノードのみを返します。

48
Kolten

name属性は一意ではありません。たとえば、ラジオボタンをグループ化するために使用されます。特定のフォームプロパティの値を表します。 idsは一意でなければなりません。

17
Ishmael

IDは一意である必要がありますが、同じNAMEで複数のフォーム要素を使用できます。これは、ラジオボタングループの1つの選択を強制できるように、ラジオボタンの動作方法の標準です。

7
Alan Barber