accounting.js 格式的输入框不允许我输入小数
Input box with accounting.js formatting not letting me input decimal numbers
在我的网站 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,美元兑换相同。
如果您非常快速地键入 .5
或者如果您将其复制粘贴到输入字段中,您实际上可以输入像 1234.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
将始终 return -1,等于 input.value.length - 1
为空 input.value
.
在我的网站 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,美元兑换相同。
如果您非常快速地键入 .5
或者如果您将其复制粘贴到输入字段中,您实际上可以输入像 1234.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
将始终 return -1,等于 input.value.length - 1
为空 input.value
.