在我的网站satoshindex.com上,当我尝试在顶部输入框中键入带小数点的数字时,它会自动删除小数点。它也不允许我用Ctrl-A突出显示输入或使用箭头键移动到数字中的其他数字。
我认为这与accounting.js有关。
以下是我网站上的相关代码:
var SAT = 0.00000001;
var BIT = 0.000001;
var MBIT = 0.001;
var BTC = 1;
var currentUnit = BTC;
我知道它与btcConvert
和usdConvert
函数中的这些行有关,因为当我删除它们时,问题就会消失,但不会使用逗号分隔数字。
var decimals = decimalPlaces(input.value);
input.value = accounting.formatNumber(input.value, decimals)
我认为问题是每次输入输入框时都会调用btcConvert,而formatNumber正在删除小数位,但是btcConvert中没有formatNumber,当它高于999时,我无法使用逗号添加逗号,同样是美元兑换。
答案 0 :(得分:2)
如果您确实快速键入1234.5
或将其复制粘贴到输入字段中,您实际上可以输入像.5
这样的十进制数字。在正常的打字速度下,1234.
始终会变为1234
,然后才能添加5
。您怀疑,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
的一种方法是替换此行:
input.value = accounting.formatNumber(input.value, decimals)
有了这个:
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,对于空{{1},它等于input.value.length - 1
}}