2010-03-31 17 views
0

我是新來的JavaScript和新手程序員,所以這可能是一個非常容易回答的問題。我想遍歷x個字段的值並將它們相加以在最終字段中顯示總和。如果我明確地調用每個字段,我可以執行此函數,但是我想抽象這個,這樣我就可以處理靈活的字段數。這裏是我提出的示例代碼(這對我來說不起作用)。我哪裏錯了?使用javascript添加不確定數量的字段

<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> 

回答

0

代號'sum'中沒有標籤。我建議在輸入標籤上使用類屬性,然後使用getElementsByTagName('input')並檢查它們是否具有相關類。 jQuery將會極大地簡化這一點,因爲您可以在一行中選擇具有某個類的所有元素:$(".className")。如果你不想要jQuery,this question可能是有趣的。

0

我會使用jQuery庫,做一個模式匹配得到所有你想要添加的元素,然後把在你的輸出領域

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) { 
相關問題