计算数量*价格=总计|总价/价格=数量

时间:2017-11-24 14:22:22

标签: javascript jquery html calculator

我需要一些帮助。

我希望“总计”“数量*价格=总计”计算(到目前为止还可以)。问题是我还需要“数量”来计算“总计/价格=数量”,即如果一个字段被更改,另一个字段将自动更改。

我制作了一个非常简单的示例代码:JSFiddle

//Value of Price (Hidden)
$('#price').val(31245);

//Calculation
var qty=$("#qty");
qty.keyup(function(){
    var total=isNaN(parseInt(qty.val()* $("#price").val())) ? 0 :(qty.val()* $("#price").val())
    $("#total").val(total);
});
var total=$("#total");
total.keyup(function(){
    var qty=isNaN(parseInt(total.val()/ $("#price").val())) ? 0 :(total.val()/ $("#price").val())
    $("#qty").val(qty);
});

//Mask Total input
var originalVal = $.fn.val;

$.fn.val = function(value) {
    if (typeof value == 'undefined') {
        return originalVal.call(this);
    } else {
        setTimeout(function() {
            this.trigger('mask.maskMoney');
        }.bind(this), 100);
        return originalVal.call(this, value);
    }
};

$('#total').maskMoney();

$('#total').on('click mousedown mouseup focus blur keydown change input', function(event) {
    console.log('This Happened:'+ event.type);
});

其中第一部分“quantity * price = total”正常运行并自动更新。但是,如果在第二部分“总计/价格=数量”,则会出现问题。

当在总输入中输入的数字太大时(例如:9,876.23),数量不会自动计算并返回0.但如果数字是例如893.23,则数量可以正常工作。

你能帮助我吗? (抱歉我的英语不好)

Ps:我需要数量字段的值不超过8位小数(例如:0.00000000)。但是在我尝试的所有尝试中都没有用。

2 个答案:

答案 0 :(得分:0)

计算中无法理解掩码自动生成的千位分隔符,因此您应首先从输入中删除它

var qty=isNaN(parseInt(total.val().replace(",", "")/ $("#price").val())) ? 0 :(total.val().replace(",", "")/ $("#price").val())

但是,如果出现超过一千个分隔符(1,000,000),则会出现此问题,因此您可以全局删除所有数千个分隔符:

var my_total = total.val().replace(/,/, "");

答案 1 :(得分:0)

调试此方法最简单的方法是断点适当的位置,看看发生了什么。例如,在Chrome中,启动Dev Tools,找到结果面板,然后设置断点:

Picture of JSFiddle at the appropriate spot

然后,在控制台中,开始评估表达式的部分内容。在这里,我评估了total.val()。那么发生了什么?

要意识到的关键是total.val()会返回字符串!那么当您使用"9,873.76"之类的数字作为数字时会发生什么?没错,JavaScript不知道如何处理逗号和平底船,返回NaN

为什么当你有一个数千的数字时它会出现?因为较小的数字不会有逗号。

因此,您将获得零。