2012-06-20 21 views
14

私はこれをやりたいと思っている正当な理由がありますが、それは長い話です。理由を説明しようとするのを忘れてしまいます。同じ名前の複数のHTMLフォームを使用することはできますか?

同じ名前の複数のフォームが必要なページがありますが、送信ボタンがクリックされたフォームのみが必要です。たとえば、次のようなものが私のページにあります。

<form name="input" action="" method="get"> 
Username: <input type="text" name="user" /> 
<input type="submit" value="Submit" /> 
</form> 

text 

<form name="input" action="" method="get"> 
Username: <input type="text" name="user" /> 
<input type="submit" value="Submit" /> 
</form> 

text 

<form name="input" action="" method="get"> 
Username: <input type="text" name="user" /> 
<input type="submit" value="Submit" /> 
</form> 

これは受け入れられますか?

+0

http://validator.w3.org – BalusC

+0

http://www.onlinewebcheck.comはHTML5文書で重複するフォーム名エラーを検出します –

+0

なぜフォーム名を使用するのですか:http://stackoverflow.com/questions/ 8946320/what-the-point-of-html-forms-name-attribute –

答えて

15

formの要素は、一意性の要件がないため、同じname属性を使用することができます。しかし、そのような属性の目的は敗北します。クライアント側のスクリプトでフォームを参照しやすくするためのものです。<form name=foo>がある場合、document.fooはそのフォームを参照します。

同じname属性が使用されている場合の動作は不明ですが、ブラウザのように見えるのは配列を返すことです。あなたの例では、document.fooは3要素配列で、document.foo[0]が最初の形式です。しかし、これは有用ではありません。文書内に他の形式がないと仮定すると、よく定義された意味でdocument.forms[0]を使うことができます。

nameの属性自体は、form要素の旧式です(フォームフィールドでは必須ではありません)。 HTML 4.01 spec clause on formはこう言っています:

"name = cdata [CI] この属性は、スタイルシートまたはスクリプトから参照されるように要素の名前を付けます。注意。この属性は下位互換性のために含まれています。アプリケーションでは、要素を識別するためにid属性を使用する必要があります。

HTML5のドラフトでは、正式な規則でも同じname属性を使用できません。 HTML5 clause on the name attribute on formは、その値が "ある場合は、formsコレクション内のform要素の中で一意でなければなりません"と述べています。これは混乱する処方ですが、ドキュメントの要素の中で一意でなければならないと考えるのが最も安全です。

+0

複数の一致する名前の場合document.fooについてのビットは未定義ですが、そのセクションはありません。3.1.4 http://dev.w3.org/html5/spec/dom.html#dom-documentのDOMツリーアクセサー-namedItem - 3.1.4の最後まで定義しますか? – Alohci

+0

@Alohci、それは現在の仕様では未定義です。 HTML5のドラフトでは、このための仕組みが定義されていますが、独自性要件も課されます。 –

+0

ええ、公正なポイント。別のHTML 4モードとHTML5モードを持たないため、HTML 4とHTML 5、そしてuser-agents *の扱いについての議論は時には非常に複雑になります。 – Alohci

10

はい、許可されているのは、idのものだけが一意である必要があります。しかし、私はそれをお勧めしません、なぜなら、混乱している道に身を置くことさえあるのです。

属性は、各フォームフィールド要素がサーバーに送信されたときに表示されるものだけを定義します。

+5

'form'要素の' name'属性は、サーバーに送信されるデータには影響しません。フォームフィールドの 'name'属性と混同している可能性があります。 –

0

ユーザーが送信ボタンをクリックすると、そのフォームのみが実行されます。それでも、混乱しないように名前を付ける方が良いでしょう:)

1

HTML5でもOKです。名前はフォーム内で一意でなければなりません。

docs: "値は空の文字列であってはならず、その値はフォームコレクション内のフォーム要素の中で一意でなければなりません。

+1

これは誤解を招く可能性があります。 HTML5では、[W3Cは](https://www.w3.org/TR/html5/forms.html#attr-form-name)を要求します**フォームの** 'name'はフォームのコレクション内で一意でなければなりません、もしあれば。しかし、フォーム内の要素の 'name'は、\ __ charset \ __を除く[任意の空でない文字列](https://www.w3.org/TR/html5/forms.html#attr-fe-name)にすることができますと_isindex_。 – Qdeep

関連する問題