0

これが私のコードです:

HTML:

<form name="frm1">
    <input type="checkbox" id="chk1" name="chk1[]"  value="1"/>
    <input type="checkbox" id="chk1" name="chk1[]"  value="2"/>
</form>
<button class="test1">Test 1</button>

<form name="frm2">
    <input type="checkbox" id="chk2" name="chk2[]"  value="1"/>
    <!--<input type="checkbox" id="chk2" name="chk2[]"  value="2"/>-->
</form>
<button class="test2">Test 2</button>

<form name="frm3">
    <input type="checkbox" name="chk3[]"  value="1"/>
    <input type="checkbox" name="chk3[]"  value="2"/>
</form>
<button class="test3">Test 3</button>

脚本:

$('button.test3').click(function (){
    alert(document.frm3.chk3.length);// Gives error: document.frm3.chk3 is undefined  
});

$('button.test2').click(function (){
    alert(document.frm2.chk2.length);// Outputs: undefined
});

$('button.test1').click(function (){
    alert(document.frm1.chk1.length);// Gives 2 as expected
});

フィドル: http://jsfiddle.net/mgsvy/

formbynameにアクセスできる場合、上記で予期しない結果が生じるのelementsなぜですか?

4

3 に答える 3

0

あなたはこのようなプロパティを使用することができdocument.frm3['chk3[]'].lengthますdocument.getElementsByName

document.getElementsByName('chk1[]').length

document.getElementsByName('chk2[]').length

document.getElementsByName('chk3[]').length

ライブデモ

于 2013-03-13T08:25:45.787 に答える
0

それを行うための防水方法はここにあります:http://jsfiddle.net/mgsvy/2/

複数の要素で同じIDを使用したため、チェックボックスのIDを削除しました。これが、動作に一貫性がない理由です。名前には角かっこが含まれているため、その特定の名前を参照するには角かっこ表記を使用する必要があります。

その名前の要素が1つしかない場合は、長さプロパティを持たないノードリストではなくノードとして格納され、undefined返されます。は|| 1、適切な出力が得られることを確認します。

alert(document.frm2['chk2[]'].length || 1);
于 2013-03-13T08:26:57.133 に答える
0

使用する必要がありますalert(document.frm3["chk3[]"].length);

document.frm3name プロパティを使用して要素を識別します。この場合、チェックボックスの名前はchk3[]使用する必要があるためですdocument.frm3["chk3[]"]

デモ:フィドル

于 2013-03-13T08:18:12.730 に答える