【发布时间】:2021-05-19 02:21:07
【问题描述】:
我正在尝试模仿 <input type="text"> 以表现得像 <input type="number">(向上/向下箭头键增加/减少值)
到目前为止它工作正常,除非值达到Number.MAX_SAFE_INTEGER (9007199254740992) 它停止增加,但type="number" 可以超过该数字。
有没有办法可以绕过javascript中的这个限制?
const input = document.querySelector('input[type="text"]'),
step = {ArrowUp: 1, ArrowDown: -1};
input.addEventListener("keydown", (e) =>
{
if (step[e.key])
{
input.value = Number(input.value) + step[e.key];
return e.preventDefault();
}
});
<table>
<tr>
<td>type="text"</td>
<td><input type="text" value="9007199254740990"></td>
<td>use UP/DOWN arrow keys</td>
</tr>
<tr>
<td>type="number"</td>
<td><input type="number" value="9007199254740990"></td>
</tr>
</table>
根据@CertainPerformance 答案BigInt() 似乎是一个很好的解决方法,但是它不允许使用浮点数。
此外,如果 step 设置为例如 1.4,则使用浮点数,它会显示一些奇怪的数字,例如 4.199999999999999
【问题讨论】:
标签: javascript