1

我对javascript/比较jQuery陌生,并且无法获得预期的结果。即使只有一个输入有值,我也希望显示总数,否则我希望显示 0。但是现在它需要输入所有 3 个值才能显示总和。当我输入输入时,它不会简单地将下一个输入添加到总数中。我可以想象一系列冗长的条件语句,它们会交叉检查每个输入的 .length 并根据每个输入返回总数。当然必须有一个更简单/更清洁的方法。如果这是java,我会使用total +=(变量),它会在我去的时候把它们加起来。这似乎在这里行不通。

    $('#invoice_labor, #invoice_materials, #invoice_other').keyup(function() {  
        if ($('#invoice_labor').length || $('#invoice_materials').length || $('#invoice_other').length ) {
            updateTotal();        
        } else {
            $('#invoice_total').html(0);
        }
    });     
    var updateTotal = function () {
        var input1 = parseFloat($('#invoice_labor').val(), 2);
        var input2 = parseFloat($('#invoice_materials').val(), 2);
        var input3 = parseFloat($('#invoice_other').val(), 2);
        var total = input1 + input2 + input3;      
        $('#invoice_total').html(total);
        $("#invoice_total").html(parseFloat($("#invoice_total").html()).toFixed(2));         
    };  

这是我正在修补的小提琴。

因此,无论我在哪个字段中输入数字,我都希望总数发生变化。如果它只有一个,则将其添加到总变量并返回它。如果是两者的任意组合,则将它们组合起来并将它们添加到总数中。谢谢您的帮助。

4

1 回答 1

2

尝试

$('#invoice_labor, #invoice_materials, #invoice_other').keyup(function() {  
    updateTotal();        
});     
var updateTotal = function () {
    var input1 = parseFloat($('#invoice_labor').val()) || 0;
    var input2 = parseFloat($('#invoice_materials').val()) || 0;
    var input3 = parseFloat($('#invoice_other').val()) || 0;
    var total =  input1 + input2 + input3;      
    $("#invoice_total").html(total.toFixed(2));         
};  

演示:小提琴

你的小提琴几乎没有问题

  1. 您在 body keyup 处理程序中注册了输入 keyup 事件,这是错误的 - 这将导致第一次击键无法识别,并会在后续调用中触发多个 updatetotal 调用
  2. 如果字段为空,则 parseFloat 将返回 NaN,添加时将导致 NaN 作为结果
  3. parseFloat 只接受一个参数
于 2013-08-07T02:32:32.077 回答