2012-03-30 16 views
11

ラジオを2つ一緒に使用する場合、ラジオが期待通りに機能するためには、すべてのラジオが同じ名前属性にする必要があることに気付きました。同じ「名前」を持つ入力属性

<label for="a1"><input type="radio" name="a" id="a1" value="1">1</label> 
    <label for="a2"><input type="radio" name="a" id="a2" value="2">2</label> 
    <label for="a3"><input type="radio" name="a" id="a3" value="3">3</label> 
    <label for="a4"><input type="radio" name="a" id="a4" value="4">4</label> 

重複する名前属性を持つことができます(必須である)ために、入力は唯一の入力タイプですか?他の入力でこれを行うと、ブラウザによって無効と見なされます。

私はこの状況をスクリプトで処理する必要があり、複数の同じ名前を扱う際に考慮すべき他の入力タイプがあるかどうかを知りたいので、これを求めています。

答えて

12

ユーザー対話の観点からは、input:radio要素は同じ[name]を使用しているため、ブラウザーは一度に:checkedの1つだけを許可することがわかっています。

フォーム提出の観点から、いずれかの要素が同じ名前を持つことができます。ここHTML Spec

で定義されているように、彼らはすべてのクエリ文字列にシリアライズされるカップルの例です:

<form action="/foo/bar"> 
    <input type="hidden" name="fizz" value="buzz" /> 
    <input type="radio" name="foo" value="bar" /> 
    <input type="radio" name="foo" value="baz" /> 
    <input type="submit" value="Go" /> 
</form> 

(チェックbarラジオボタンで)このフォームを送信するクエリ文字列になります:

?fizz=buzz&foo=bar 

ホーweverは、あなたがfooinput:hidden要素の名前を変更する場合:

<form action="/foo/bar"> 
    <input type="hidden" name="foo" value="buzz" /> 
    <input type="radio" name="foo" value="bar" /> 
    <input type="radio" name="foo" value="baz" /> 
    <input type="submit" value="Go" /> 
</form> 

をクエリ文字列は次のようになります。

?foo=buzz&foo=bar 

あなたはbuzzbarの両方を得ることができるように、サーバーこれを正しく解析する必要がありますしかし、私は、文字列の解析をクエリする際には、サーバー側の言語のいくつかに癖があることがわかりました。キーは[]接尾辞されている場合、特に

PHPは、配列にキーを回します。

?foo[]=buzz&foo[]=bar$_GET['foo'] = array('buzz', 'bar');

9

あなたが重複した名前を持つことができる唯一の入力タイプが

番号を属性ラジオ入力された任意のフォームコントロールは、他のフォームのコントロールと名前を共有することができます。

これは、チェックボックス(特に「任意の数を選択」と言うことができ、各項目に異なる名前をハードコードすることなくサーバー上の結果をループすることができます)と送信ボタンすべての可能な名前をループせずにクリックされたものを知ることができます)。

(必須)

はい。ラジオボタンのみが共有名に基づいて特別な動作をします。

+0

サーバー側は、それらが結合/解析されているかという点で、同じ名前を共有する他の要素のための「特別な」行動を有することができます。もちろん、これはHTML仕様の一部ではなく、フレームワークによって異なります。 – AaronLS

1

技術的には重要なのは、生成されたURL文字列です。名前の同じ値がページ上で属性を持つことは完全に有効です)

1

なし、いくつかの他のコントロールは、DUPの名前で存在している...同じ名前のボタンを提出する可能性があります。

チェックボックスの一般的なフォールバックは、同名の入力を無効にして、値をfalseに設定することです。同じ名前の値を使用する場合は、期待される出力を再度確認してください。通常、解析される最新の値は、同じ名前の以前のパラメータを上書きします。

、あなたが実際には複数の要素を持つ配列を作成することができ、同じ名前の下にグループの様々な分野、例えばに必要がある場合:

<input name="list[]" /> 
<input name="list[]" /> 
<input name="list[]" /> 
2

を、だから、理論的には2が

+0

隠されたフィールドのセキュリティリスクにも注意してください! –

+2

最後の値が勝つと仮定し、名前の最後に '[]'を付けることは、宇宙の* PHP *中心のビューです。 – Quentin

+1

@AshokRajどのような特定の種類のセキュリティリスクが隠されたフィールドに入力されているのですか? – Dunhamzzz

0

いくつかの要素名を、または複数回だけのHTMLパーサによって無視され使用された場合の属性
たとえば、複数のIDを使用する場合は、最初のIDのみが考慮されます。

+0

あなたが言及しているのは、あなたが言及した理由のために重複してはいけない 'id'です。しかし、 'name'は複数のことができます。 – AaronLS

1

ます。また、同じ名前の複数の隠された入力を持つことができています。指摘したように、サーバー側のフレームワークがそれらをどのように解析するかの問題です。 .NET MVCでは、モデルバインダーは、ポストアクションメソッドのパラメータ内の同じ名前のコレクション、またはポストアクションのビューモデルパラメータのプロパティを検索します。このような例としてList<int>List<Guid>、またはList<string>

見るように: https://stackoverflow.com/a/2013915/84206

関連する問題