0

checkboxコードが機能するようになりましたが、同じ名前のものが複数ある場合にのみ機能する理由を知りたいと思いました。それぞれに独自の名前を付けたいのですcheckboxが、それでも一緒に追加します。どんな助けでも大歓迎です。これが私のコードです:

function checkTotal() {
    document.listForm.total.value = '';
    var sum = 0;
    for (i=0;i<document.listForm.choicea.length;i++) {
        if (document.listForm.choicea[i].checked) {
            sum = sum + parseInt(document.listForm.choicea[i].value);           
        }
        if (document.listForm.choiceb[i].checked) {
            sum = sum + parseInt(document.listForm.choiceb[i].value);
        }
    }
    document.listForm.total.value = sum;
}


<form name="listForm">
    <input type="checkbox" name="choicea" value="2" onchange="checkTotal()"/>2<br/>
    <input type="checkbox" name="choicea" value="5" onchange="checkTotal()"/>5<br/>
    <input type="checkbox" name="choiceb" value="10" onchange="checkTotal()"/>10<br/>
    <input type="checkbox" name="choiceb" value="20" onchange="checkTotal()"/>20<br/>
    Total: <input type="text" size="2" name="total" value="0"/>
</form>
4

2 に答える 2

1

名前を持つチェックボックスが 1 つしかない場合、JavaScript バインディングは配列にはなりません。たとえば、配列にはなりませchoicea[0]choicea

各アイテムに同じクラス名を付けて使用できますgetElementsByClassName(IE9 以上、IE8 以下では shim が必要です)。これは常にアイテムの配列を返します (まあ、HTMLCollection実際には)。

于 2013-05-14T09:51:32.570 に答える
0

各インスタンスで「choicea」/「choiceb」を配列として使用しています。それぞれの名前が 1 つしかない場合、配列にはなりません。古い .form.control メソッドを使用するのではなく、jQuery と入力セレクターを使用することを検討してください。おそらく簡単です。$("myselector").each などを使用します。そうでない場合は、代わりに GetElementsByTagName を検討できます。

于 2013-05-14T09:48:46.880 に答える