2012-10-21 101 views
0

我有一個訂單和一個JavaScript應該計算從文本總計(數量*價格),多選和單選,但我失去了一些東西,因爲我收到NaN的錯誤。有人能幫我解決嗎? 非常感謝。JavaScript的形式計算返回NaN

DEMO

+0

你應該通過閱讀和固定5個警告,JS斌表示開始。 –

+1

整個概念是有缺陷的開始你的計算變量作爲一個字符串,然後串聯其他字符串......並期待一個數字作爲回報。使用控制檯登錄值會看到它,是個不折不扣的爛攤子 – charlietfl

+1

你不應該嘗試解決這個爛攤子,但從頭改寫它,而無需使用'eval'。因爲現在你正在執行用戶輸入(表單域值)作爲javascript代碼!而你只是一步(接受url參數)遠離麻煩。 – migg

回答

0

像許多人評論說,有一些嚴重的不足之處,以你的代碼。我不會重複這些擔憂,但是,這些問題非常重要,您應該瞭解您正在使用的技術。

的原因,你得到一個NaN的是這樣的。你的字段對象是一個數組。代碼填充字段陣列在任意的索引,即字段並[f] = 0;

當你填充索引數組時,比如說5,你的代碼是這樣做的:fields [5] = 0;。有了這個聲明,你從一個空的數組[],到有6個條目的數組,其中前5個條目默認爲undefined [undefined,undefined,undefined,undefined,undefined,0]

現在後面的代碼,當你做了總結,並添加條目陣列把這些(已準備使用eval一個字符串)...不確定+ 0 +未定義+ 8 ...正在製作一個非數字錯誤。

相反,以防止這種情況的一種方法是項到域陣列,如:

if (userInputs[f].value) 
{ 
    fields.push(userInputs[f].value); 
} 
else 
{ 
    fields.push(0); 
} 

推將一個條目添加到數組的結尾。 []將成爲[0]如果你推(0)

+0

謝謝大家的建議,我以爲我接近解決這個表格,但顯然我不是。我現在看到的唯一解決方案是深入學習JavaScript。 –