【问题标题】:'Numbers only directive' not working in Chrome 49.xx.xx and below“仅数字指令”在 Chrome 49.xx.xx 及以下版本中不起作用
【发布时间】:2018-07-23 07:33:58
【问题描述】:

我正在使用 Angular 6 并编写了一个指令,以将输入限制为仅限数字,用于我的某些输入字段。该指令如下所示

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

@Directive({
  selector: '[NumbersOnly]'
})

export class NumbersOnlyDirective {
  // Allow decimal numbers and negative values
  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> = ['ArrowLeft', 'ArrowRight', '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;
    }
    const current: string = this.el.nativeElement.value;
    const next: string = current.concat(event.key);
    if (next && !String(next).match(this.regex)) {
      event.preventDefault();
    }
  }
}

无论我在哪里输入字段,我都会使用如下指令

<input [(ngModel)]="sendLinkMobile" NumbersOnly type="text" id="mobile-num"  
class="form-control m-no" placeholder="Mobile Number"  requried  minlength="10" 
maxlength="10" aria-label="Recipient's username" aria-describedby="basic-addon2">

代码在所有最新的浏览器、手机、标签中都能完美运行。但是,在 chrome 49.xx 及更低版本上使用它时,输入字段不采用任何值。谁能帮我看看问题出在哪里?

提前致谢。

【问题讨论】:

    标签: javascript angular typescript input angular-directive


    【解决方案1】:

    使用 it 指令并检查一下。我认为它适用于 chrome 49.xx

    import { Directive, ElementRef, HostListener, Input } from '@angular/core';
    
    @Directive({
      selector: '[OnlyNumber]'
    })
    export class Onlynumber {
    
      constructor(private el: ElementRef) { }
    
      @Input() OnlyNumber: boolean;
    
      @HostListener('keydown', ['$event']) onKeyDown(event) {
        let e = <KeyboardEvent> event;
        if (this.OnlyNumber) {
          if ([46, 8, 9, 27, 13, 110, 190].indexOf(e.keyCode) !== -1 ||
            // Allow: Ctrl+A
            (e.keyCode === 65 && (e.ctrlKey || e.metaKey)) ||
            // Allow: Ctrl+C
            (e.keyCode === 67 && (e.ctrlKey || e.metaKey)) ||
            // Allow: Ctrl+V
            (e.keyCode === 86 && (e.ctrlKey || e.metaKey)) ||
            // Allow: Ctrl+X
            (e.keyCode === 88 && (e.ctrlKey || e.metaKey)) ||
            // Allow: home, end, left, right
            (e.keyCode >= 35 && e.keyCode <= 39)) {
              // let it happen, don't do anything
              return;
            }
            // Ensure that it is a number and stop the keypress
            if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
                e.preventDefault();
            }
          }
      }
    }
    

    HTML:

    <input OnlyNumber="true"  type="text" #numberModel="ngModel" [(ngModel)]="numberModel"  name="numberModel" />
    

    【讨论】:

    • 它工作正常,但是当我粘贴任何字母时,它也会采用它。它也不应该允许粘贴任何东西。
    • 得到了我所需要的。谢谢
    猜你喜欢
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 2014-07-30
    • 2019-09-25
    • 1970-01-01
    相关资源
    最近更新 更多