Выпадающий список не зарегистрирован функцией отмены Chrome - PullRequest
0 голосов
/ 17 января 2019

У меня есть пользовательский компонент ввода, который расширяет текстовый ввод с помощью выпадающего списка с предложениями, основанными на предыдущем вводе пользователя. Когда я впоследствии выбираю другие предложения и затем использую функцию отмены Chrome с помощью , нажимая CTRL + Z, он объединяет предыдущую строку, а не заменяет текущую строку в поле.

Например, когда я сначала выбираю предложение «AAA», затем удаляю его, затем выбираю «BBB» и нажимаю CTRL + Z, вход содержит строку «BBBAAA».

Так что кажется, что вставка строки из выпадающего меню не зарегистрирована в Chrome как модификация DOM в стеке отмены. Поскольку последнее зарегистрированное действие удаляло строку, функция отмены просто объединяет ее с текущей.

Это происходит в Chrome и Internet Explorer 11, в Firefox у меня нет проблем.


Я пытался подавить функцию отмены CTRL + Z для данного ввода с пользовательской директивой:

@HostListener('keydown', ['$event']) onKeyDown(e: KeyboardEvent) {
  if (e.ctrlKey && e.keyCode === 90) {
    e.preventDefault();
  }
}

Однако я все еще могу отменить изменения ввода, нажав CTRL + Z в другом поле ввода, поэтому мне придется отключить функцию отмены для всего сайта.

Как мне сказать Chrome добавить изменение ввода в его стек отмены ?

Вот простая функция обратного вызова с помощью раскрывающегося ввода, которая обновляет значение при выборе раскрывающегося элемента:

(contact) => {
  if (this.formGroup) {
    this.formGroup.patchValue(contact);
  }
}

Замена patchValue() на setValue(), похоже, не имеет никакого значения, равно как и вызов this.formGroup.markAsTouched();.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...