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


当前回答

< input type = "数量" name = " credit_days "模式= ^ \[-]+” # credit_days = " ngModel " class = "表单控件” 占位符="{{'输入信用天数' |翻译}}" min="0" [(ngModel)] = " provider.credit_days " onkeypress = "返回(事件。charCode == 8 ||事件。charCode == 0 || 事件。charCode == 13) ?Null:事件。charCode >= 48 &&事件。charCode < = 57" onpaste="return false"> .

其他回答

oninput="this.value=(this.value   < Number(this.min) || this.value   > Number(this.max))  ? '' : this.value;"

我对@Abhrabm的回答不满意,因为:

它只是阻止负数输入 向上/向下箭头,而用户可以输入负数从键盘。

解决方法是防止用键码:

//选择输入元素。 var number = document.getElementById('number'); //在numInput上监听输入事件 号码。Onkeydown =函数(e) { 如果(! ((e。> 95 && e.keyCode < 106) || (e.keyCode > 47 && e.keyCode < 58) || e.keyCode == 8)) { 返回错误; } } <form action="" method="post"> <input type="number" id="number" min="0" /> <input type="submit" value="点击我!"/> > < /形式

由@Hugh Guiney提供的澄清:

正在检查哪些关键代码:

95, < 106对应Numpad 0到9; 47, < 58对应数字行上的0到9;8是 退格键。

所以这个脚本是防止在输入中输入无效的键。

简单的方法:

<input min='0' type=“number” onkeypress=“return (event.charCode == 8 || event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57”>

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

创建一个类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">

仅供参考:使用jQuery,你可以用以下代码覆盖focusout上的负值:

$(document).ready(function(){
    $("body").delegate('#myInputNumber', 'focusout', function(){
        if($(this).val() < 0){
            $(this).val('0');
        }
    });
});

这并不能取代服务器端验证!