2010-08-17 54 views
0

我遇到一些奇怪的事情,請看下面。爲什麼警報1輸出0,但警報2輸出正確的總和?它們被設置爲同樣的事情...將var設置爲兩個文本框值的總和爲0,怎麼樣?

var sumTotal = parseFloat($('#tb1').val()) + parseFloat($('#tb2').val()); 
//tb1.val() == 3, tb2.val() == 5;  

1) alert(sumTotal); //Outputs 0; 
2) alert(parseFloat($('#tb1').val()) + parseFloat($('#tb2').val())); //Outputs 8; 

精確代碼:

$(document).ready(function() { 
     var koh = 1; 
     var sumTotal = parseFloat($('#tb1').val()) + parseFloat($('#tb2').val()); 
     window.setInterval(function() { 
      // correct value 
      tb3.val(parseFloat($('#tb1').val()) + parseFloat($('#tb2').val())); 
      tb3.val(parseFloat(sumTotal)); // 0 
      tb3.val(sumTotal); // 0 
      tb3.val(koh++) //increments +1 
     }, 2500); 
    }) 

因爲KOH增量+1可這仍然是一個範圍的問題嗎?

+1

是'sumTotal'被定義在與第二個警報表達式的運行時間不同的時間嗎? – 2010-08-17 17:24:44

+1

您確定在達到警報時sumTotal處於範圍內嗎? – Fosco 2010-08-17 17:25:26

+0

我在Firefox中進行了測試,並且#1和#2都收到了警報8 – Adam 2010-08-17 17:26:55

回答

1

SumTotal公司的的文本框中的值計算之前已經改變。如果它們默認爲0,結果將爲0,並且即使文本框的值也不會更改。

如果他們默認爲空白,sumTotal是NaN - 它仍然不會改變。

+0

。什麼菜鳥的錯誤。非常感謝。 – 4imble 2010-08-18 07:46:27

0

嘗試刪除呼叫parseFloat,所以這行

tb3.val(parseFloat(sumTotal)); 

成爲

tb3.val(sumTotal); 

事實上,sumTotal已經是一個浮動(你總結前將它轉換):

var sumTotal = parseFloat($('#tb1').val()) + parseFloat($('#tb2').val()); 

和使用parseFloat浮點值將probab導致未定義的行爲。


我想我發現它:文本框中的值預填充在html中?

如果文本框是空的或者在這一點上含有0

var sumTotal = parseFloat($('#tb1').val()) + parseFloat($('#tb2').val()); 

存儲在了SumTotal將NaN或0分別(由於超指出這點)的值,它不會從再改上:請記住tb3.val(sumTotal);聲明不會重新評估sumTotal

如果您想更新用戶輸入你需要這樣的東西的總和:

$(document).ready(function() { 
    var sumTotal = parseFloat($('#tb1').val()) + parseFloat($('#tb2').val()); 
    $('#tb1').add('#tb2').keyup(function() { 
     sumTotal = parseFloat($('#tb1').val()) + parseFloat($('#tb2').val()); 
     tb3.val(sumTotal); 
    }); 
}) 
+0

opps。是的,我沒有,我試圖添加它,看看它是否有幫助。這兩種方式都沒有區別。 – 4imble 2010-08-17 17:46:13

+0

當解析爲浮點數時,空字符串變成NaN。 – cHao 2010-08-17 18:03:37

+0

cHao,看來我們有相同的想法。順便說一句,謝謝你指出這一點。當然,哈哈,當然是 – Utaal 2010-08-17 18:06:21