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

如果只有一个带有名称的复选框,那么 JavaScript 绑定将不是一个数组,例如,它不会是choicea[0],它只是choicea.

您可以为每个项目赋予相同的类名并使用getElementsByClassName(IE9 或更高版本,IE8 及更低版本将需要一个 shim),它总是返回一个项目数组(HTMLCollection实际上是一个)。

于 2013-05-14T09:51:32.570 回答
0

您在每个实例中都使用“choicea”/“choiceb”作为数组。如果每个名称只有一个,则不会是数组。考虑只使用 jQuery 和输入选择器而不是使用旧的 .form.control 方法,它可能会更容易。使用 $("myselector").each 或类似的。如果没有,您可以考虑将 GetElementsByTagName 作为替代方案。

于 2013-05-14T09:48:46.880 回答