javascript - 如何防止用户在 Angular 2 的文本框中粘贴错误的值?

标签 javascript angular

我正在尝试创建一个控件,让用户在文本框中输入 hh:mm。 但是,当用户尝试粘贴无效文本时,我无法使其正常工作。

尽管用户无法输入非字母数字字符。他们仍然能够粘贴它。

这是我的主机事件,可防止用户输入除允许的字符之外的任何字符

@HostListener("keydown", ["$event"])
@HostListener("keyup", ["$event"])
onKeyDown(event: any) {
  let allowedCharacters = `^[0-9-:]*$`;
  const e = event as KeyboardEvent;
    if ([8, 9, 27, 13].indexOf(e.keyCode) !== -1 ||
        //Ctrl+A
        (e.keyCode === 65 && (e.ctrlKey || e.metaKey)) ||
        //Ctrl+C
        (e.keyCode === 67 && (e.ctrlKey || e.metaKey)) ||
        //Ctrl+V
        (e.keyCode === 86 && (e.ctrlKey || e.metaKey)) ||
        //Ctrl+X
        (e.keyCode === 88 && (e.ctrlKey || e.metaKey)) ||
        //home, end, left, right
        (e.keyCode >= 35 && e.keyCode < 39)) {
        return;
    }
    if (!String(e.key).match(allowedCharacters)) {
      event.preventDefault();
    }
}

这是我的 ngModelChange 事件

 onModelChange(value: any): void {
   this.myTextBoxValue= value;
}

这是我的文本框:

<input type="text" [ngModel] = "myTextBoxValue" (ngModelChange)="onModelChange($event)" 

最佳答案

触发粘贴事件

<input type="text" [ngModel] = "myTextBoxValue" (paste)="onPaste($event)" (ngModelChange)="onModelChange($event)" 

组件:

onPaste(e: any) { e.preventDefault()}

关于javascript - 如何防止用户在 Angular 2 的文本框中粘贴错误的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47384259/

相关文章:

javascript - Jquery删除后隐藏

javascript - D3js缩放不起作用

javascript - Webpack/Angular - Materialise 未加载

arrays - 如何将对象插入数组?在 Angular 7

Angular 2 - 如何更改 RxJS Observable 的间隔

javascript - Chrome 扩展 : chrome. runtime.getURL 在 console.log 上正确获取 URL,但与 fetch 一起使用时不起作用

javascript - 离开页面时 React Native 不运行函数

javascript - Firebase Web 检索更具体的数据并对其进行排序

angular - 大型 Angular Material 弹出框应使父内容可滚动

javascript - 链接到服务器在运行时生成的文件