我有一个 html<input>
元素,我只想接受数字并在移动设备上将其识别为数字字段。我还希望吞下无效字符,就像标准type=number
吞咽不允许的字符一样。
我已经尝试过显而易见的,type=number
但它有许多缺点。具体来说,它允许 'e'、'+' 和 '-'(至少在 chrome 中),但这些很容易用一些 JS 修复。真正的问题在于'.' 字符,我希望能够输入浮点数,例如“0.10”、“5.5054”,但不想输入无效的字符串,例如“0.10.1”。我试图通过只允许 1 '.' 来解决这个问题。一次,但这失败了input.value
,因为浏览器对它进行了按摩,例如“5”。变为 '5','5..' 变为空(!),并且似乎不可能获得输入中键入的原始字符串值。以上意味着检查现有的 '.' 并采取行动似乎是死胡同......
核心问题:
有没有办法检查和符合输入?
'有没有一种方法可以将输入标记为一个没有后勤包袱的数字type=number
?
注意:
* 我意识到你可以粘贴任何你想要的东西,我认为这种行为是病态的,不应该被输入预防所覆盖。
澄清一下,我已经尝试过keypress
, keydown
etc 事件,但它们还不够,因为我想查看当前输入中存在多少个 '. 以选择是否允许另一个。此时input.value
已经被浏览器按摩以删除'.'。我想根据当前输入的 '.' 的数量有条件地允许字符。
例子
HTML(为简洁起见,角度样式绑定)
<input type="number" (keydown)="keyDown()">
JS
function keyDown($event: KeyboardEvent) {
const inputField = // obtain reference to input element
const value = inputField.value;
if ( value.indexOf('.') !== -1 && $event.key === '.') { // disallow another . if one is present
// ! input field prunes . so this check isn't sufficient
$event.preventDefault();
return;
}
// This is the crux of the problem e.g.
// type 5. into input field, value === 5
// type 5.. into the input field, value === null
// Since the . char is removed by the input element there's no way to know how many are present!
console.log(value);
}
概括
有没有办法在<input>不使用type=number属性设置的情况下发出信号类型为 number 的信号。
即移动设备识别和显示数字键盘等
对于一个<input>有type=number没有办法吞下所有不会导致有效数字的键输入
在浏览器将字符添加到输入中之前,不会进行 janky 删除 keyup
叮当猫咪
慕斯王
相关分类