Я пытаюсь запустить событие нажатия клавиши, при котором нажатие клавиши изменяется на запятую. Если вы нажмете какое-то другое не числовое значение, оно отправит событие keydown, имитирующее запятую, и ожидаемое поведение - это ввести запятую в текстовое поле. Проблема в том, что когда он завершает второй вызов (запятый), он не записывает запятую. У кого-нибудь есть идеи по этому поводу?
Спасибо.
<input type="text" (keydown)="validate($event)" />
validate(event) {
if (!this.validatenumeric(event)) {
event.preventDefault();
} else {
if(event.key!=","){
event.preventDefault();
var getterCode = { get: function () { return 188 } };
var getsourceCapabilities = { get: function () { return event.sourceCapabilities } };
var e = new KeyboardEvent("keydown", {
altKey: false,
bubbles: true,
cancelable: true,
code: "Comma",
composed: true,
ctrlKey: false,
key: ",",
detail: 0,
location: 0,
metaKey: false,
repeat: false,
shiftKey: false,
view: window
});
Object.defineProperties(e, {
which: getterCode,
keyCode: getterCode,
sourceCapabilities: getsourceCapabilities
});
this.elementRef.nativeElement.querySelector('input').dispatchEvent(e);
}
}
}
validatenumeric(key) {
var keycode = (key.which) ? key.which : key.keyCode;
//comparing pressed keycodes
if ((keycode >= 48 && keycode <= 57)) {
// 0-9 only
return true;
} else if ((keycode >= 96 && keycode <= 105)) {
// 0-9 only
return true;
}
else return false;
return false;
}
Некоторое обновление .. Я думаю, что смогу решить это. Вместо этого пытаюсь сделать еще одно нажатие клавиши ... Я создаю KeyUp и проверяю, является ли это запятой. Найдите курсор и вставьте запятую в позицию. Не знаю, есть ли простой способ сделать это :) Спасибо всем
> <input type="text" (keydown)="validate($event)"
> (keyup)="validateUp($event)" />
>
> validateUp(event) { let pos =
> this.elementRef.nativeElement.querySelector('input').selectionEnd;
> if (event.key == ',' ) {
> this.textValue = text.slice(0, pos) + event.key + text.slice(pos);
> } }
>
>
> validateWithtDecimals(event) {
> var text: string = this.textValue;
>
>
> if (!this.validatenumeric(event, text, this.separator)) {
> event.preventDefault();
> }
> else {
>
> if(event.key!=","){
> event.preventDefault();
>
> var getterCode = { get: function () { return 188 } };
>
> var e = new KeyboardEvent("keyup", {
> altKey: false,
> bubbles: true,
> cancelable: true,
> code: "Comma",
> composed: true,
> ctrlKey: false,
> key: ",",
> detail: 0,
> location: 0,
> metaKey: false,
> repeat: false,
> shiftKey: false,
> view: window
> });
>
> Object.defineProperties(e, {
> which: getterCode,
> keyCode: getterCode,
> });
>
> this.elementRef.nativeElement.querySelector('input').dispatchEvent(e);
> }
> } }