本文介绍了使用“key"时出现错误而不是“keyCode"带有“键盘事件"有角度的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我正在尝试为输入字段(文本框)创建自定义指令,使其仅接受数字而不接受字母字符.

我有以下(仅限numbers.directive.ts)文件:

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

@Directive({
  selector: "[onlyNumbers]"
})
export class OnlyNumbersDirective {
  constructor(private el: ElementRef) {}

  @HostListener('keydown', ['$event'])
  onKeyDown(e: KeyboardEvent) {
    if (
      // Allow: Delete, Backspace, Tab, Escape, Enter
      [46, 8, 9, 27, 13].indexOf(e.keyCode) !== -1 ||
      (e.keyCode === 65 && e.ctrlKey === true) || // Allow: Ctrl+A
      (e.keyCode === 67 && e.ctrlKey === true) || // Allow: Ctrl+C
      (e.keyCode === 86 && e.ctrlKey === true) || // Allow: Ctrl+V
      (e.keyCode === 88 && e.ctrlKey === true) || // Allow: Ctrl+X
      (e.keyCode === 65 && e.metaKey === true) || // Cmd+A (Mac)
      (e.keyCode === 67 && e.metaKey === true) || // Cmd+C (Mac)
      (e.keyCode === 86 && e.metaKey === true) || // Cmd+V (Mac)
      (e.keyCode === 88 && e.metaKey === true) || // Cmd+X (Mac)
      (e.keyCode >= 35 && e.keyCode <= 39) // Home, End, Left, Right
    ) {
      return; // let it happen, don't do anything
    }
    // 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();
    }
  }

}


上面的代码工作正常,但我知道keyCode"已被弃用,因此我尝试使用key"代替,但出现此错误:


The code above works fine but I knew that the "keyCode" is deprecated, so I try to use "key" instead but I got this errors:

字符串"类型的参数不可分配给数字"类型的参数.(截图)

此条件将始终返回 'false',因为类型 'string' 和 '65'没有重叠.(截图)


所以我的问题是如何解决它?

提前致谢

推荐答案

我按照 Eliseo 指出的那样使用了这个解决方案并且效果很好https://stackoverflow.com/a/54462816/6663458

I used this solution as Eliseo pointed out and it worked very wellhttps://stackoverflow.com/a/54462816/6663458

感谢埃利塞奥

这篇关于使用“key"时出现错误而不是“keyCode"带有“键盘事件"有角度的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-02 03:32