2013-09-28 97 views
0

嗨我遇到了使用更改方法更新計算結果的問題。從動態創建的數據計算得到NaN

該計算是通過放置在表格行中的動態創建的數據進行的。 所以每行的最後一列應該顯示價格* qty(qty是從動態創建的select元素派生的)的總和。創建每行的方法是從自動完成輸入框中選擇一個選項。

每當用戶從dt中的select元素中選擇選項時,該行的總數應該被更新。它第一次工作,但第二次結果列轉向NaN。

jSfiddle

我想我可能會與我如何設置行與

$("tr").not(":first").each(function(){// meant to not get the header but the rest of the rows which have the data for the calculations 

或數學部分的問題。我從字符串中減去0使其成爲一個數字,所以我認爲我不應該得到NaN。我知道我搞砸了一些似乎對你很明顯的問題,但不要對我隱瞞。

$("tr").not(":first").each(function(){ 
    var qnty = 0; 

    $('select').change(function(){ 
     qnty = $('select').val(); 
     calcTotal(); 
    }) 
    function calcTotal(){ 
     var price = (($(".price").text()) - 0).toFixed(2) 
     $(".total").text(qnty * price); 
    } 
}) 

要總結的問題。從第二次創建具有數據的行開始,計算不起作用。結果列中的結果是NaN。我顯然希望結果是Total列中每行的qnty *價格的計算。

這裏的jSfiddle來說明我的問題。

+1

如果你使用parseInt函數或parseDouble而不是減去0,會發生什麼? –

+0

我試着parseInt發生了同樣的事 –

回答

2

這將是代碼:

$("tr").not(":first").each(function(){ 
    var qnty = 0; 
    var $row=this; 
    $('select',$row).change(function(){ 
     qnty = $('select',$row).val(); 
     calcTotal($row); 
    }) 
    function calcTotal($row){ 
     var price = (($(".price",$row).text()) - 0).toFixed(2) 
     $(".total",$row).text(qnty * price); 
    } 
}) 
+0

感謝您的答案。這會將新行和前一行總計的總數更改爲新行總數,我希望前面的行保持不變。謝謝。 –

+0

我更新了答案,請檢查!並接受它的工作! –

+0

謝謝,但現在當我想改變qnty結果不會改變。我希望用戶應該有能力在任何時候更改qnty,無論哪一行,並且Total列應該在更改qnty –