目前我有以下代码
<input type="number" />
结果是这样的
右边的选择器允许数字变为负数。我该如何预防呢?
我对使用type="number"有疑问,它造成的问题比它解决的要多,我无论如何都要检查它,所以我应该回到使用type="text"吗?
目前我有以下代码
<input type="number" />
结果是这样的
右边的选择器允许数字变为负数。我该如何预防呢?
我对使用type="number"有疑问,它造成的问题比它解决的要多,我无论如何都要检查它,所以我应该回到使用type="text"吗?
当前回答
我在angular中创建了一个指令,强制输入no“-”。
import { Directive, ElementRef, HostListener } from '@angular/core';
@Directive({
selector: '[appPositiveNumber]'
})
export class PositiveNumberDirective {
private regex = new RegExp(/^\d*[.,]?\d*$/g);
private specialKeys: Array<string> = ['Backspace', 'Tab', 'End', 'Home', 'ArrowLeft', 'ArrowRight', 'Del', 'Delete'];
constructor(private el: ElementRef) { }
@HostListener('keydown', ['$event']) onKeyDown(event: KeyboardEvent) {
if (!event.key.match(this.regex) && !this.specialKeys.includes(event.key)) {
event.preventDefault();
return;
}
}
}
所以u可以像这样将它添加到元素上:
<input type="number" appPositiveNumber min="0" step="1" max="9999"
[(ngModel)]="value.employeeCount">
其他回答
添加一个min属性
<输入类型=“数字” min=“0”>
通过在输入标记中添加onkeypress,可以强制输入只包含正整数。
<input type=“number” onkeypress=“return event.charCode >= 48” min=“1” >
在这里,事件。charCode >= 48确保只返回大于或等于0的数字,而min标记确保通过在输入栏内滚动可以得到最小值1。
我认为使用类型文本是最好的,而不是数字,因为使用类型=数字,你将面临一些问题,如输入字段的方向键和上、下键的值变化。
<input type="text" onkeypress="return event.charCode>=48 && event.charCode<=57" />
如果需要文本输入,该模式也可以工作
<input type="text" pattern="\d+">
你可以使用以下命令使type="number"只接受正数:
<input type="number" step="1" pattern="\d+">