Angular Firefox 的 2/4 按键
Angular 2/4 keypress with Firefox
我在 Firefox 57 上使用 Angular 4,我有以下输入字段:
<input mdbActive type="tel" id="phoneNumber" class="form-control" [(ngModel)]="userdetail.phoneNumber" required (keypress)="restrictNumberInput($event)" (paste)="false">
后端代码为:
restrictNumberInput(event: any) {
let regexStr = '^[0-9]+$';
let e = <KeyboardEvent>event;
if ([8, 9, 27, 13, 190].indexOf(e.keyCode) !== -1 ||
// Allow: Ctrl+A
(e.keyCode == 65 && e.ctrlKey === true) ||
// Allow: Ctrl+C
(e.keyCode == 67 && e.ctrlKey === true) ||
// Allow: Ctrl+V
(e.keyCode == 86 && e.ctrlKey === true) ||
// Allow: Ctrl+X
(e.keyCode == 88 && e.ctrlKey === true)) {// ||
// Allow: home, end, left, right
//(e.keyCode >= 35 && e.keyCode <= 39)) {
// let it happen, don't do anything
return;
}
let ch = String.fromCharCode(e.keyCode);
let regEx = new RegExp(regexStr);
if (regEx.test(ch))
return;
else
e.preventDefault();
}
我在这段代码的第一行添加了一个断点,它没有停止。
当我按任意键时,restrictNumberInput 函数没有 运行。为什么会这样?
我相信您正在寻找 Angular 2+ 中的 (keyup)
。
The (keyup) event handler hears every keystroke.
有关详细信息,请参阅 Angular 网站上的用户输入指南:
https://angular.io/guide/user-input#key-event-filtering-with-keyenter
修复您的 HTML 代码段
只需将 (keypress)
更改为 (keyup)
即可修复您提供的示例。
<input mdbActive type="tel" id="phoneNumber" class="form-control" [(ngModel)]="userdetail.phoneNumber" required (keyup)="restrictNumberInput($event)" (paste)="false">
您可以通过将绑定分成两部分来实现,如下所示:
<input mdbActive type="tel" id="phoneNumber" class="form-control" [ngModel]="userdetail.phoneNumber" required (ngModelChange)="restrictNumberInput($event)" (paste)="false"/> {{userdetail.phoneNumber}}
您需要使用 keyup
事件来监听键盘事件。
另外在你的 restrictNumberInput 方法中你需要 return true/false 在限制的基础上。
restrictNumberInput(event: KeyboardEvent) {
if(condition_to_allow_numbers) {
return true; // This will allow user input to be entered
} else {
return false; // This won't allow user input to be entered.
}
}
我在 Firefox 57 上使用 Angular 4,我有以下输入字段:
<input mdbActive type="tel" id="phoneNumber" class="form-control" [(ngModel)]="userdetail.phoneNumber" required (keypress)="restrictNumberInput($event)" (paste)="false">
后端代码为:
restrictNumberInput(event: any) {
let regexStr = '^[0-9]+$';
let e = <KeyboardEvent>event;
if ([8, 9, 27, 13, 190].indexOf(e.keyCode) !== -1 ||
// Allow: Ctrl+A
(e.keyCode == 65 && e.ctrlKey === true) ||
// Allow: Ctrl+C
(e.keyCode == 67 && e.ctrlKey === true) ||
// Allow: Ctrl+V
(e.keyCode == 86 && e.ctrlKey === true) ||
// Allow: Ctrl+X
(e.keyCode == 88 && e.ctrlKey === true)) {// ||
// Allow: home, end, left, right
//(e.keyCode >= 35 && e.keyCode <= 39)) {
// let it happen, don't do anything
return;
}
let ch = String.fromCharCode(e.keyCode);
let regEx = new RegExp(regexStr);
if (regEx.test(ch))
return;
else
e.preventDefault();
}
我在这段代码的第一行添加了一个断点,它没有停止。
当我按任意键时,restrictNumberInput 函数没有 运行。为什么会这样?
我相信您正在寻找 Angular 2+ 中的 (keyup)
。
The (keyup) event handler hears every keystroke.
有关详细信息,请参阅 Angular 网站上的用户输入指南: https://angular.io/guide/user-input#key-event-filtering-with-keyenter
修复您的 HTML 代码段
只需将 (keypress)
更改为 (keyup)
即可修复您提供的示例。
<input mdbActive type="tel" id="phoneNumber" class="form-control" [(ngModel)]="userdetail.phoneNumber" required (keyup)="restrictNumberInput($event)" (paste)="false">
您可以通过将绑定分成两部分来实现,如下所示:
<input mdbActive type="tel" id="phoneNumber" class="form-control" [ngModel]="userdetail.phoneNumber" required (ngModelChange)="restrictNumberInput($event)" (paste)="false"/> {{userdetail.phoneNumber}}
您需要使用 keyup
事件来监听键盘事件。
另外在你的 restrictNumberInput 方法中你需要 return true/false 在限制的基础上。
restrictNumberInput(event: KeyboardEvent) {
if(condition_to_allow_numbers) {
return true; // This will allow user input to be entered
} else {
return false; // This won't allow user input to be entered.
}
}