2012-07-17 18 views
0

我已經使用這個網站很多研究等,並發現它非常有用。JavaScript數組插入函數不起作用?

我一直在開發一些代碼,它會得到一個輸入id名稱列表,然後使用javascript/jquery將它們加在一起。

這就是我到目前爲止 - 它可能會很好,因爲我仍然是一個新手。

到目前爲止,代碼獲取的輸入名稱罰款。它也計算得很好,但是當我把數組放入「var fieldnames」時,計算停止工作?

當我複製數組(將其放入輸入後)並粘貼到「var fieldnames」時,它工作正常。

這個問題似乎是數組沒有正確地傳遞給「var fieldnames」?

這是來自頁面的代碼 - 它將數組放入底部的輸入中,僅用於調查目的,但計算不起作用,除非您手動輸入輸入名稱!

任何幫助將不勝感激。 感謝

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
</head><body> 




<script type="text/javascript" language="javascript"> 
function getTotal(oForm) 
    { 
var arrayOfIDs = $('.myClass').map(function() { return this.id; }).get(); 
var test = (arrayOfIDs.length ? "'" + arrayOfIDs.join("','") + "'" : ""); 

document.getElementById("sum").value = test; 

    var field, i = 0, total = 0, els = oForm.elements; 
    var fieldnames = [test]; 

    document.getElementById("sum1").value = fieldnames; 

    for (i; i < fieldnames.length; ++i) 
    { 
    field = els[fieldnames[i]]; 
    if (field.value != '' && isNaN(field.value)) 
    { 
    alert('Please enter a valid number here.') 
    field.focus(); 
    field.select(); 
    return ''; 
    } 
    else total += Number(field.value); 
    } 
    return ' ' + total; 
    } 
</script> 




<div id="listing"> 
<form> 
<table> 
<td>8065020</td> 
<td>2012-04-10</td> 
<td>household</td> 
<td><input class="myClass" id="pay47" type="text" name="pay47" value="38.45"/></td> 
</tr> 
<tr> 
<td>8065021</td> 
<td>2012-04-10</td> 

<td>household</td> 
<td><input class="myClass" id="pay48" type="text" name="pay48" value="37.4"/></td> 
</tr> 
<tr> 
<td>8065022</td> 
<td>2012-04-10</td> 
<td>household</td> 
<td><input class="myClass" id="pay49" type="text" name="pay49" value="375"/></td> 
</tr> 
<tr> 
<td>8065014</td> 
<td>2012-04-04</td> 

<td>household</td> 
<td><input type="text" class="myClass" id="pay50" name="pay50" value="06"/></td> 
</tr> 
<tr> 
<td>8065015</td> 
<td>2012-04-04</td> 
<td>motorprotect</td> 
<td><input type="text" class="myClass" id="pay51" name="pay51" value="01"/></td> 
</tr> 
<tr> 
<td>8065011</td> 
<td>2012-03-06</td> 

<td>household</td> 
<td><input type="text" class="myClass" id="pay52" name="pay52" value="55"/></td> 
</tr> 
<tr> 
<td>8065012</td> 
<td>2012-03-06</td> 
<td>household</td> 
<td><input type="text" class="myClass" id="pay53" name="pay53" value="56"/></td> 
</tr> 
<tr> 
<td>1</td> 
<td/> 

<td>household</td> 
<td><input type="text" class="myClass" id="pay54" name="pay54" value="56"/></td> 
</tr> 
<tr> 
<td>2</td> 
<td/> 
<td>household</td> 
<td><input type="text" class="myClass" id="pay55" name="pay55" value="52"/></td> 
</tr> 
<tr> 
<td>3</td> 
<td/> 
<td>household</td> 

<td><input type="text" class="myClass" id="pay56" name="pay56" value="53"/></td> 
</tr> 
<tr> 
<td>4</td> 
<td/> 
<td>household</td> 
<td><input type="text" class="myClass" id="pay57" name="pay57" value="55"/></td> 
</tr> 
<tr> 
<td>8065001</td> 
<td/> 
<td>landlord</td> 
<td><input type="text" class="myClass" id="pay58" name="pay58" value="5"/></td> 

</tr> 
<tr> 
<td>8065002</td> 
<td/> 
<td>landlord-basic</td> 
<td><input type="text" class="myClass" id="pay59" name="pay59" value="59"/></td> 
</tr> 
<tr> 
<td>8065003</td> 
<td/> 
<td>household</td> 
<td><input type="text" class="myClass" id="pay60" name="pay60" value="5"/></td> 
</tr> 

<tr> 
<td>8065004</td> 
<td/> 
<td>household</td> 
<td><input type="text" class="myClass" id="pay61" name="pay61" value="5"/></td> 
</tr> 
<tr> 
<td>8065005</td> 
<td/> 
<td>household</td> 
<td><input type="text" class="myClass" id="pay62" name="pay62" value="5"/></td> 
</tr> 
<tr> 

<td>8065006</td> 
<td/> 
<td>landlord-basic</td> 
<td><input type="text" class="myClass" id="pay63" name="pay63" value="64"/></td> 
</tr> 
<tr> 
<td>8065008</td> 
<td/> 
<td>household</td> 
<td><input type="text" class="myClass" id="pay64" name="pay64" value="5" /></td> 
</tr> 
<tr> 
<td>8065010</td> 

<td/> 
<td>business-basic</td> 
<td><input type="text" class="myClass" id="pay65" name="pay65" value="10" /></td> 
</tr> 
</table> 


<input id="total" type="text" name="total" value="" readonly="readonly" /> 
<input type="button" value="Get Total" onclick="total.value=getTotal(this.form)" /> 
<br /><br /> 
<input name="totalpay" id="sum" type="text" />sum<br /> 
<input name="totalpay" id="sum1" type="text" />sum1 
</form> 
</div> 






</body> 
</html> 
+0

您是否嘗試在body標籤之後添加您的腳本? – 2012-07-17 12:02:49

+0

'fieldnames'是一個只包含一個元素的數組,它是'#sum'輸入的字符串值。這大概不是你想要的。 – Utkanos 2012-07-17 12:18:21

+0

該代碼位於開始標籤下方?和fieldnames舉行測試這是字段的數組? – 2012-07-17 12:37:38

回答

0

1-替換行

var test = (arrayOfIDs.length ? "'" + arrayOfIDs.join("','") + "'" : ""); 

通過

var test = (arrayOfIDs.length ? arrayOfIDs.join(",") : ""); 

2-替換

var fieldnames = [test]; 

通過

var fieldnames = test.split(","); 

3-更換

field = els[fieldnames[i]]; 

通過

field = document.getElementById(fieldnames[i]); 

我在這裏做什麼只是糾正你的代碼來解決您的問題,但我covinced,你可以在一個更簡單的方法做到這一點。

+0

我明白,這不是最好的方式來做到這一點 - 獲得回覆後的消息,也許值得我做更多的研究,使其更簡潔,但感謝您的幫助 - 這個答案工作的一種享受。謝謝 – 2012-07-17 12:51:59

0

如果我理解正確你的問題,你只是想增加你的價值,而provideing基本的有效性檢查,你的代碼的方式複雜。像jQuery這樣的框架爲您提供了更簡單的方法。

而不是循環所有輸入元素,得到他們的id,然後再次循環它們,只做一次。

var getTotal (oForm) { 
    var sum = 0; 
    // loop through all inputs with class "myClass" inside oForm 
    $("input.myClass", $(oForm)).each(function (index, value) { 
     // add up all values that are non empty and numeric 
     if (value !== "" && !isNaN(value)) { 
      // parse the value 
      sum += parseFloat(value, 10); 
     } else { 
      // show an alert, focus the input and return early from $.fn.each 
      alert("Please enter a valid number here!"); 
      $(this).focus(); 
      return false; 
     } 
    }); 

    // set the value of 
    $("sum").val(sum); 
} 

這是從我的頭頂寫的,但應該可以正常工作。

+0

代碼位於開始標籤下方?而fieldnames則是持有測試的字段數組。 感謝Torsten,但是當我實現這個代碼時,它只是不斷提出警報消息? – 2012-07-17 12:36:59

+0

其中一些值不是整數。 – 2012-07-17 12:39:57