2012-07-18 128 views
0

我試圖添加一個稅收字段。我有這個工作的整數,但我需要能夠輸入「.5」 我沒有線索haw來解決這個問題,也許它是因爲isNAN,但我認爲這將是好的在這裏。乘以兩位小數

http://jsfiddle.net/thetylercox/eeMva/3/

我當前的代碼

$(document).ready(function() { 
    calculateSum(); 
    $(".txt").keyup(function() { 
     $(".txt").each(function() { 
      calculateSum(); 
     }); 
    }); 
}); 

$("#tax").keyup(function() { 
    $('#total1').val(parseInt($(this).val()) * parseInt($('#subtotal').val())); 
); 

function calculateSum() { 
    var sum = 0; 
    $("#sum").val(sum.toFixed(2)); 
    //iterate through each textboxes and add the values 
    $(".txt").each(function() { 
     //add only if the value is number 
     if (!isNaN(this.value) && this.value.length != 0) { 
      sum += parseFloat(this.value); 
     } 
    }); 
    $("#sum").html(sum.toFixed(2)); 
    var subtotal = document.getElementById("subtotal").value == ""; 
    var subtotal = document.getElementById("subtotal").value = sum; 


    function getTax(tax) { 
     var taxFloat = parseFloat(tax) 
     if (isNaN(taxFloat)) { 
      return 1; 
     } else { 
      return taxFloat; 
     } 
    } 

    var total = getTax($('#tax').val()) * sum; 
    var total1 = document.getElementById("total1").value = total; 
} ​ 

感謝

+0

你在哪裏遇到'NaN'? '!isNaN(「。5」)'爲我提供'true'。 – Bergi 2012-07-18 23:25:05

+2

適當的縮進增加了代碼的可讀性,並使其他人更容易幫助您。 – 2012-07-18 23:25:51

+0

你的代碼有點混亂。您添加到字段'#tax'的'keyup'函數是問題所在。 – madth3 2012-07-18 23:45:16

回答

3

試試這個:

  • 把所有的代碼,包括您$(document).ready(function(){...})結構中的功能。
  • calculateSum()內執行所有計算,包括稅額。
  • 全部使用jQuery,特別是'$(...)'優先於.getelementById(...)
  • 附加calculateSum作爲所有用戶可輸入字段的'按鍵'處理程序。
  • 清除從代碼中各種垃圾

它應該是這樣的:

$(document).ready(function(){ 
    function getTax() { 
     var taxFloat = parseFloat($("#tax").val()); 
     return isNaN(taxFloat) ? 1 : taxFloat; 
    } 

    function calculateSum() { 
     var sum = 0; 
     $(".txt").each(function() { 
      if (this.value && !isNaN(this.value)) { 
       sum += parseFloat(this.value); 
      } 
     }); 
     $("#subtotal").val(sum.toFixed(2)); 
      $("#total1").val((getTax()*sum).toFixed(2)); 
    } 

    $(".txt, #tax").keyup(calculateSum); 
}); 

DEMO

你可能想稅算法更改爲更符合邏輯。例如。對於輸入值5(%),乘數應爲1.05。

+0

「*清除代碼中的各種垃圾*」。是的,這顯然是要走的路:-) – Bergi 2012-07-19 00:55:58

+0

我經常@Bergi做,有時來自其他人的代碼,而且經常來自我自己! – 2012-07-19 01:04:27

0

稅是基於百分比。執行以下更改:

$("#tax").keyup(function() { 
    //$('#total1').val(parseInt($(this).val()) * parseInt($('#subtotal').val())); 
    calculateSum(); 
    }); 

... 

function getTax(tax) { 
     var taxFloat = parseFloat(tax) 
     if (isNaN(taxFloat)) { 
      return 1; 
     } else { 
      // 1(subtotal) + ?(tax%) -> total = (1 + tax%) * subtotal 
      return 1 + (taxFloat/100); 
     } 
    } 

    var total = getTax($('#tax').val()) * sum; 
    // round to 2 decimal digits 
    total = Math.round(total * Math.pow(10, 2))/Math.pow(10, 2); 
    var total1 = document.getElementById("total1").value = total; 

因此,對於5%你0.5%進入5您輸入.5

UPDATE:(不是一個真正的更新),當我看到更多的答案進來,我再說一遍稅務字段使用的邏輯錯誤。稅收是全世界的百分比,意味着問題不僅僅是關鍵處理,還包括稅收的使用方式。

+0

非常感謝,我會在大約30分鐘內嘗試 – 2012-07-19 00:26:42

+0

我在這裏嘗試了這個問題仍然是同樣的問題http://jsfiddle.net/eeMva/16/ – 2012-07-19 00:31:20

+0

我回答之前修改了你的jsfiddle代碼,並且沒有問題。請描述問題。 – 2012-07-19 00:34:21

0

發現你的錯誤:

$("#tax").keyup(function() { 
    $('#total1').val(parseInt($(this).val()) * parseInt($('#subtotal').val())); 
}); 

在這裏,你有parseInt,而不是parseFloat解析稅,可以在功能getTax做。 parseInt(".5")給出NaN。嘗試在插入稅款後在.txt輸入中插入值,並且在調用calculateSum函數時它將起作用。

我不明白爲什麼在按下#tax字段中的鍵時,爲什麼要使用不同的計算而不是其他字段中的普通按鍵。只需使用相同的監聽器功能,或者,如果要劃分功能,請調用函數以顯示#tax密鑰處理程序和calculateSum函數的稅額。

而且,當其中一個輸入被更新時,不需要執行calculateSum()四次。

查看更好的結構化源代碼updated fiddle。計算稅和總計的數學沒有得到糾正。

+0

我很想看看你會考慮一個寫得好的代碼來執行此操作功能!我建立在我所知道的!但你的觀點似乎有效我不知道你將如何構建它只執行一次 – 2012-07-19 00:48:07