Angular 7 blur и click не работают одновременно - PullRequest
0 голосов
/ 28 сентября 2019

В моей форме есть текстовое поле и кнопка.Я делаю некоторую операцию в событии textbox (размытие) и кнопке (click).

Давайте предположим:

пользователь вводит некоторый текст в текстовое поле и нажимает кнопку.(размытие) событие вызвано, но (щелчок) событие не вызывается.

примечание: «во время нажатия кнопки фокус должен находиться в текстовом поле.»

пример: https://stackblitz.com/edit/angular-b4h9pi

оповещение о событии размытия приходит, но оповещение о событии щелчка не поступает.

Сценарий

В событии onblur я выполняю сервисный вызов для сохранения значения этого поля.В событии onClick я должен сохранить все данные полей.Если курсор фокусируется на одном из текстовых полей, тогда пользователь нажимает кнопку сохраненияСначала я должен сохранить поле после завершения первого вызова, сделать второй вызов, чтобы сохранить все данные.Не звоните в сервис параллельно.Я хочу звонить по одному.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

Оба события действительно стреляют.Вы можете подтвердить, изменив свои alert звонки на console.log.Я полагаю, что браузер, скорее всего, просто блокирует несколько диалоговых окон с предупреждениями.


Обновление для ответа на ваш комментарий:

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

Я могу сказать вам это, хотя.Событие размытия срабатывает, затем срабатывает событие щелчка.Вы должны быть в состоянии справиться с тем, что вам нужно в этих обработчиках с этим знанием.

Если вам нужно подождать, пока ваш обработчик размытия вернется с ответом, прежде чем отправлять эти данные вместе с обработчиком щелчков, вы можете теоретически установить переменную, например

this.blurRequestLoading=true

Таким образом,вместо запуска запроса на нажатие, если blurRequestLoading равно true, вы можете установить this.clickEventPendingBlurResponse=true.

Затем, когда blurResponse вернется, вы можете установить blurRequestLoading обратно на false, иесли clickEventPendingBlurResponse равно true, запустите clickEvent вручную в обработчике ответа и установите clickEventPendingBlurResponse обратно в false.

0 голосов
/ 28 сентября 2019

Удалить alert с помощью console.log или другого соответствующего кода.alert сработает, как только фокус ввода будет потерян, даже до нажатия кнопки.Таким образом, два события не запускаются одновременно

stackblitz

...