我一直在尝试在 AngularJS 模板中创建一个输入,并且该模板只接受整数作为输入。也就是说,我不希望它允许除 0-9 之外的任何键,具体来说,我无法阻止输入中允许使用 .
。
Alexander Puchkov created a directive在使用 type="text"
的输入上实现这一点,但是我希望能够使用 type="number"
这样我就可以维护该字段上的所有其他属性验证,例如最小值、最大值、步长等。
我有一个这样的例子 directive not working on a number input here 。例如,当 type="text"
输入 123.
时,会生成 123
的渲染,但是当 type="number"时
输入 123.
会产生 123.
,因为 123
的先前值在数字比较时相等。
最佳答案
恐怕这是不可能的,因为以下条件成立:
0. == 0
如果您执行以下操作:
setTimeout(() => console.log(element[0].value), 100))
它总是将0.记录为0。这就是 ngModelCtrl 没有触发解析器的原因,因为没有检测到任何更改。
我建议不要直接修改 ngModel 的值(因为这最终也可能导致用户输入无效数据。即,在您的示例中粘贴 12.00 将解析为 1200)
我会添加一个指令,根据是否使用小数点来应用有效性(从技术上讲,输入0.实际上并不使用 它。0.01 是)。如果数字中有小数点,则将有效性设置为 false 并相应地显示错误消息(通过 ngMessages)。这样用户就可以纠正自己的错误并从错误中吸取教训。
关于javascript - AngularJS 数字输入忽略除数字之外的所有键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48105861/