0

我是 javascript 新手和新手程序员,所以这可能是一个非常容易回答的问题。我想遍历 x 个字段的值并将它们相加以在最终字段中显示总和。如果我显式调用每个字段,我可以执行此功能,但我想将其抽象化,以便我可以处理灵活数量的字段。这是我想出的示例代码(这对我不起作用)。我哪里错了?

<html>
<head>
<script type="text/javascript">
function startAdd(){
    interval = setInterval("addfields()",1);
}
function addfields(){
    a = document.addition.total.value;
    b = getElementByTagName("sum").value;
    for (i=0; i<=b.length; i++){
        a+=i;
    }
    return a;
}
function stopAdd(){
    clearInterval(interval);
}
</script>
</head>

<body>

<form name="addition">

 <input type="text" name="sum" onFocus="startAdd();" onBlur="stopAdd;">
+ <input type="text" name="sum" onFocus="startAdd();" onBlur="stopAdd;">
= <input type="text" name ="total">

</form>

</body>
</html>
4

3 回答 3

1

您的代码有两个问题。

第一个:

b = getElementByTagName("sum").value;

您可能的意思是getElementsByTagName(注意额外的s)。此外,没有<sum>元素,这是一个问题,因为你不会得到任何结果。最后,.value将返回value数组的属性(并且因为不存在,所以您将返回undefined),而不是value每个元素的属性的数组。

为了解决这些问题,你可以这样写:

inputElements = getElementsByTagName('input');
sumValues = [ ];

for(i = 0; i < inputElements.length; ++i) {
    if(inputElements[i].name == 'sum') {
        sumValues.push(inputElements[i].value);
    }
}

或者在 jQuery 中:

sumValues = $('input[name=sum]').map(function() {
    return this.value;
});

第二个:

for (i=0; i<=b.length; i++){

b.length描述元素的数量。使用<=,您将访问b[b.length]不存在的 。你想访问最多b[b.length - 1],所以写这个最惯用的方法是重写要使用的条件<而不是<=. 那是:

for(i = 0; i < b.length; ++i) {
于 2010-04-01T00:05:18.987 回答
0

您的代码中没有名为“sum”的标签。我建议在您的输入标签上使用类属性,然后使用getElementsByTagName('input')并检查它们是否具有相关类。jQuery 将极大地简化这一点,因为您将能够在一行中选择具有特定类的所有元素:$(".className"). 如果你不想要 jQuery,这个问题可能会很有趣。

于 2010-04-01T00:00:34.787 回答
0

我将使用 jQuery 库并进行模式匹配以获取您要添加的所有元素,然后将其放入您的输出字段

于 2010-04-01T00:03:03.533 回答