2012-07-18 89 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