【问题标题】:Keydown event not working in Android DeviceKeydown 事件在 Android 设备中不起作用
【发布时间】:2017-08-21 09:24:56
【问题描述】:

我使用 keydown 事件编写了一个函数,让输入只允许数字、'-' 和 BackSpace 键。当我在 ionic serve 或 iOS 中测试时,它起作用了。但是当我在 Android 设备上测试时,它不起作用,输入字段将允许输入所有字符。 当我使用console.log(事件)时,它总是返回key="Unidentified", keyCode = 229。

环境:Ionic 3、Node v6.11、NPM 3.10、Android 5.1.1

我不知道如何解决这个问题。

.ts 文件

import {Component} from '@angular/core';
import {NavController} from 'ionic-angular';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {
  constructor(public navCtrl: NavController) {

  }

  isValidNumber(event) {
    //console.log(event);
    return /\d|-|Backspace/.test(event.key);

  }
}

.html 文件

<ion-header>
  <ion-navbar>
    <ion-title>Home</ion-title>
  </ion-navbar>
</ion-header>
<ion-content>
  <ion-item>
      <ion-input  type="text" (keydown)="isValidNumber($event)"></ion-input>
  </ion-item> 
</ion-content>

【问题讨论】:

  • 你为什么不用type="number"
  • @SwapnilPatwa 我想输入一个像'0001234'这样的字符串值,所以如果type = number,它将转换为1234。无论如何,我也想允许输入'-'字符。我更新了我的答案。

标签: android angular ionic-framework ionic2 ionic3


【解决方案1】:

尝试以下方法:

function isValidNumber(e) {
if (
    !(e.keyCode === 8 || !(e.keyCode >= 48 && e.keyCode <= 57) ||  // 0-9
        !(e.keyCode >= 96 && e.keyCode <= 105) // numpad 0-9
        // some more checking like arrows, delete, backspace, etc.
        || e.keyCode == 229)) { // Check for the 'placeholder keyCode'
    return false;
}
{
    // This is not a valid key
    e.preventDefault();
}
return true;

}

找到here

另请阅读以下内容:http://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html

【讨论】:

  • 我从 Android 键盘输入的所有字符总是返回 keyCode = 229;
  • 我正在真正的安卓设备上进行测试,先生(三星 e5 SM-E500H)。
  • 设备的默认语言是什么?检查我的更新答案
  • 默认是越南语,但我改成英文(美国),还是不行
猜你喜欢
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多