我想只得到正的值,有什么方法来防止它只使用html 请不要建议验证方法


当前回答

简单地使用min="0"

< v-text-field v模型=“abc” 类= " ml-1 rounded-0” 概述了 密集的 label = "数量" type = "数量" min = " 0 " > < / v-text-field >

其他回答

我想允许小数,如果输入负数,不清除整个输入。这在铬至少工作良好:

<input type="number" min="0" onkeypress="return event.charCode != 45">

如果你不想在HTML中添加更多代码,只需要添加另一种方法(使用Angular):

您只需要订阅字段valueChanges并将Value设置为绝对值(注意不要触发新事件,因为这会导致另一个valueChange,因此会触发递归调用并触发最大调用大小超出错误)

HTML代码

<form [formGroup]="myForm">
    <input type="number" formControlName="myInput"/>
</form>

TypeScript代码(在组件内部)

formGroup: FormGroup;

ngOnInit() { 
    this.myInput.valueChanges 
    .subscribe(() => {
        this.myInput.setValue(Math.abs(this.myInput.value), {emitEvent: false});
    });
}

get myInput(): AbstractControl {
    return this.myForm.controls['myInput'];
}

下面是一个角度上的解决方案:

创建一个类OnlyNumber

import {Directive, ElementRef, HostListener} from '@angular/core';

@Directive({
  selector: '[OnlyNumber]'
})
export class OnlyNumber {

  // Allow decimal numbers. The \. is only allowed once to occur
  private regex: RegExp = new RegExp(/^[0-9]+(\.[0-9]*){0,1}$/g);

  // Allow key codes for special events. Reflect :
  // Backspace, tab, end, home
  private specialKeys: Array<string> = ['Backspace', 'Tab', 'End', 'Home'];

  constructor(private el: ElementRef) {
  }

  @HostListener('keydown', ['$event'])
  onKeyDown(event: KeyboardEvent) {
    // Allow Backspace, tab, end, and home keys
    if (this.specialKeys.indexOf(event.key) !== -1) {
      return;
    }

    // Do not use event.keycode this is deprecated.
    // See: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
    let current: string = this.el.nativeElement.value;
    // We need this because the current value on the DOM element
    // is not yet updated with the value from this event
    let next: string = current.concat(event.key);
    if (next && !String(next).match(this.regex)) {
      event.preventDefault();
    }
  }
}

将OnlyNumber添加到app.module.ts中的声明中,并像这样在应用程序的任何地方使用它

<input OnlyNumber="true">

这个代码对我来说工作得很好。你能查一下吗:

<input type="number" name="test" min="0" oninput="validity.valid||(value='');">

限制数字类型中的字符(-)和(e)

<input type="number" onkeydown="return event.keyCode !== 69 && event.keyCode !== 189" />

演示:https://stackblitz.com/edit/typescript-cwc9ge?file=index.ts