首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有accounting.js格式的输入框不允许我输入十进制数

带有accounting.js格式的输入框不允许我输入十进制数
EN

Stack Overflow用户
提问于 2015-12-24 02:44:01
回答 1查看 1.5K关注 0票数 2

在我的网站satoshindex.com上,当我尝试在顶部输入框中键入一个小数点的数字时,它会自动删除小数点。它也不允许我用Ctrl突出显示输入,也不允许我使用箭头键移动到数字中的另一个数字。

我认为这与accounting.js有关。

以下是我网站的相关代码:

代码语言:javascript
复制
  var SAT = 0.00000001;
  var BIT = 0.000001;
  var MBIT = 0.001;
  var BTC = 1;
  var currentUnit = BTC;

我知道这与btcConvertusdConvert函数中的这些行有关,因为当我删除它们时,问题就消失了,但是没有用逗号来分隔数字。

代码语言:javascript
复制
var decimals = decimalPlaces(input.value);
input.value = accounting.formatNumber(input.value, decimals)

我认为问题是,每次输入框中输入btcConvert时,formatNumber都会删除小数位,但是如果没有btcConvert中的formatNumber,我就无法让它在大于999的数字中添加逗号,在美元转换中也是如此。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-24 04:39:19

如果您输入的.5非常快,或者如果您将其复制粘贴到输入字段中,则实际上可以输入类似于.5的十进制数。在正常的输入速度下,1234.总是在添加5之前变成1234。正如您所怀疑的,accounting.js正在将1234.简化为1234,因为它认为这是规范格式。

因此,您希望用户能够在输入字段中键入1234.0并将其自动格式化为1,234.0。我认为有三种可能的办法:

  • 修改accounting.js代码。编辑accounting.formatNumber,以便当小数点是input.value的最终字符时,它不会丢弃小数点。
  • 不要使用accounting.js来格式化输入字段。将对accounting.formatNumber的调用替换为对自己编写的格式化函数的调用。
  • 一个快速而又脏的解决方案:不要修改accounting.js并保持对accounting.formatNumber的调用,但是如果input.value在末尾有一个小数点,并且您得到一个没有小数点的字符串,那么将它继续。

将快速和肮脏的方法应用于btcConvert的一种方法是替换这一行:

代码语言:javascript
复制
input.value = accounting.formatNumber(input.value, decimals)

在这方面:

代码语言:javascript
复制
var formatted = accounting.formatNumber(input.value, decimals);
if (input.value.indexOf('.') == input.value.length - 1 &&
    input.value.length != 0 &&
    formatted.charAt(formatted.length - 1) != '.') {
  formatted += '.';
}
input.value = formatted;

检查input.value.length != 0是必要的,因为如果input.value是空字符串,indexOf总是返回-1,这等于空input.valueinput.value.length - 1

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34446607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档