功能不计算格式化数字的值

时间:2016-09-08 20:14:45

标签: javascript jquery

我构建了一个计算器,它接受用户输入(1个文本字段,2个选择下拉列表),然后在满足所需条件时显示下面的输出。我还希望文本输入字段在用户输入数字时动态显示千位分隔符(逗号),我用这个来实现:

$('#orderAmt').keyup(function(event) {
  // skip for arrow keys
  if (event.which >= 37 && event.which <= 40) return;
  // format number
  $(this).val(function(index, value) {
    return value
      .replace(/\D/g, "")
      .replace(/\B(?=(\d{3})+(?!\d))/g, ",")
  });
});

现在,正如预期的那样,计算器功能无法识别这些值中的任何一个,因为它们已被转换为字符串。我假设下一步是使用像parseInt这样的东西,所以我在.keyup函数的末尾添加了这一行:

var converted = parseInt($('#orderAmt'), 10);

但是我对下一步该做什么感到很遗憾,因为实际的计算器函数是用vanilla JS编写的,在这里我试图将用户的值存储在一个新的jQuery变量中。我应该采取更好的方法吗?

这是我的JSFiddle - https://jsfiddle.net/bkroger7/yk13wzcc/

如果有人能指出我正确的方向,我们将不胜感激。

BTW - 我已经尝试了臭名昭着的非jQuery addCommas函数,如here所示,但它对我来说不起作用 - 目前只有基于jQuery的解决方案一直在运行。

2 个答案:

答案 0 :(得分:1)

你的问题是你是在输入字段中添加逗号然后按原样...

所以当您在添加逗号后使用$('#orderAmt').val()时,您将获得3,000而不是3000

你需要做的就是删除逗号......

这是一个工作分叉 https://jsfiddle.net/Lw9cvzn0/1/

通知var orderAmount = $('#orderAmt').val().replace(new RegExp(','), '');

答案 1 :(得分:1)

您错过了对.val()的调用以获取字段的值。然后你必须在解析之前删除逗号。

var converted = parseInt($('#orderAmt').val().replace(/,/g, ''), 10);