javascript - Android KeyUp、KeyDown 和 KeyPress 事件不适用于 Angular2

标签 javascript android html angular events

我遇到一个问题,当我运行时

<input type="text" (keydown)="testKeyCodes($event)"/>
<!-- or -->
<input type="text" (keyup)="testKeyCodes($event)"/>

我在 android chrome 浏览器中总是得到 229 的 keyCode,我知道这在堆栈溢出中已被多次提及,并且我已经看到了使用的建议

<input type="text" (keypress)="testKeyCodes($event)"/>

相反。问题是,android 手机不会触发按键事件。有没有人找到解决方案?

我的最终目标是防止 Android 浏览器上的用户在我的字母数字输入中输入特殊字符。

下面是我想要检查的正则表达式。

//tried this
testKeyCodes(event) {
    if (!/[a-zA-Z0-9 ]/.test(event.keyCode) && event.keyCode != '8') {
        event.preventDefault();
    }
}

//and this
testKeyCodes(event) {
    if (!/[a-zA-Z0-9 ]/.test(String.fromCharCode(event.keyCode)) && event.keyCode != '8') {
        event.preventDefault();
    }
}

任何帮助将不胜感激。我完全陷入困境。

最佳答案

我会编写一个指令,使用自定义验证器监听input事件,如下所示:

....
@HostListener('input',['$event']) 
    onInput($event){
      let newValue = this.el.nativeElement.value;
      ...   
      let patternValidation=newValue.match(myPattern); //replace here with your regexp

      if(patternValidation){
         //keep input
      } else {
         //exclude input
         newValue = patternValidation;
      }

      this.model.control.setValue(newValue);
  }

  <input myDirective [(ngModel)]="value" name="value" >

这是一个粗略的描述,您可能需要使其更详细。

关于javascript - Android KeyUp、KeyDown 和 KeyPress 事件不适用于 Angular2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46164658/

相关文章:

javascript - 如何通过单击链接在 Bootstrap 模式中打开特定的可折叠面板

javascript - 如何使用JS检测网络中的服务器?

javascript - 如何通过 Electron 执行操作系统粘贴操作

android - TextView Ellipsize (...) 不工作

html - 如何确保 DIV 中的图像随浏览器调整大小而调整大小

javascript - 根据规范并排定位 CSS 中的两个元素

javascript - 如何防止谷歌浏览器输入建议?

android - 来自 Json 的可扩展 ListView

java - androidx.appcompat.widget.AppCompatTextView 无法转换为 android.widget.CheckedTextView

javascript - Materialise: "if"语句中的下拉菜单不起作用