angular - 只有数字和十进制指令不起作用 - Angular 4
问题描述
我正在制定一个只允许十进制数字的指令,并且最多只能有 2 个位置。
但它没有按预期工作。Stackblitz 可以找到如下
我面临的错误如下:
- 我不能使用F5or ctrl+ A, ctrl+ V, ctrl+R等键。
- 一旦您在输入框中输入了类型,然后将光标移动到小数点前,您将无法输入:(
- 此解决方案在 Safari 浏览器 iPad 中不起作用(为什么?)
解决方案
尝试这样的事情:
import { Directive, ElementRef, HostListener } from '@angular/core';
@Directive({
selector: '[appDecimalNumber]'
})
export class DecimalNumberDirective {
constructor(private el: ElementRef) { }
@HostListener('keydown', ['$event']) onKeyDown(event: KeyboardEvent) {
let e = <KeyboardEvent>event;
if ([8, 9, 13, 27, 46].indexOf(e.keyCode) !== -1 ||
// Allow: Ctrl+A
(e.keyCode === 65 && (e.ctrlKey || e.metaKey)) ||
// Allow: Ctrl+C
(e.keyCode === 67 && (e.ctrlKey || e.metaKey)) ||
// Allow: Ctrl+V
(e.keyCode === 86 && (e.ctrlKey || e.metaKey)) ||
// Allow: Ctrl+X
(e.keyCode === 88 && (e.ctrlKey || e.metaKey)) ||
// Allow: home, end, left, right
(e.keyCode >= 35 && e.keyCode <= 39)) {
// let it happen, don't do anything
return;
}
// 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();
}
}
@HostListener('keyup', ['$event']) onKeyup(event: KeyboardEvent) {
this.validateFields(event);
}
@HostListener('paste', ['$event']) blockPaste(event: KeyboardEvent) {
this.validateFields(event);
}
//Todo For limit Parse Int
validateFields(event) {
setTimeout(() => {
let numberRegEx = /^[0-9]+$/;
if (!numberRegEx.test(this.el.nativeElement.value)) {
this.el.nativeElement.value = "";
event.preventDefault();
}
}, 100)
}
}
推荐阅读
- java - Java throws 子句 - sonarqube 问题
- python-3.x - 为集成测试生成代码覆盖率
- c# - 第一次更改文本有效,但之后我得到 NullReferenceException: Object reference not set to an instance of an object
- android - ld:未知选项:--sysroot=/Users/myname/Library/Android/ndk/android-ndk-r20b/toolchains/llvm/prebuilt/darwin-x86_64/sysroot
- swift - 在 Swift for iOS 中使用 TensorFlow 模型
- microsoft-graph-api - 由于 Microsoft 端的编码转换失败,无法使用 Microsoft Graph API 收到电子邮件
- javascript - Javascript:在双引号内查找双引号,无论是在开头,中间还是结尾
- python - 如何使用正则表达式解析字符串日期?
- python - 用多个 y1:y2, x1:x2 对 numpy 数组的多个帧进行切片
- ios - Xcode12 beta4:为 iOS 模拟器构建,但在为独立构建的目标文件中链接