在我的网站satoshindex.com上,当我尝试在顶部输入框中键入一个小数点的数字时,它会自动删除小数点。它也不允许我用Ctrl突出显示输入,也不允许我使用箭头键移动到数字中的另一个数字。
我认为这与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的数字中添加逗号,在美元转换中也是如此。
发布于 2015-12-24 04:39:19
如果您输入的.5非常快,或者如果您将其复制粘贴到输入字段中,则实际上可以输入类似于.5的十进制数。在正常的输入速度下,1234.总是在添加5之前变成1234。正如您所怀疑的,accounting.js正在将1234.简化为1234,因为它认为这是规范格式。
因此,您希望用户能够在输入字段中键入1234.0并将其自动格式化为1,234.0。我认为有三种可能的办法:
accounting.formatNumber,以便当小数点是input.value的最终字符时,它不会丢弃小数点。accounting.formatNumber的调用替换为对自己编写的格式化函数的调用。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,这等于空input.value的input.value.length - 1。
https://stackoverflow.com/questions/34446607
复制相似问题