фокусировка на элемент, конфликтующий с нажатием на другой в Angular - PullRequest
0 голосов
/ 27 августа 2018

У меня есть focusout() событие element1 и click() событие element2, и когда element1 выходит из фокуса, потому что было выполнено событие щелчка на element2, срабатывает только фокусировка, событие щелчка нет.

Это отлично работает [на jQuery] [1], но не на Angular.

Я нашел обходной путь, добавив window.setTimeout(), который работает и для angular. К сожалению, я не могу этого сделать.

Еще одно предложение очень ценится.

Пожалуйста, найдите код с setTimeout:



$('#txtName').on("focusout",function(event) {
    //Alternate solution required for `setTimeout`.
    window.setTimeout( function() {alert('focus gone');},1000); }); 

    $('#button1').on('click',function(){
       alert('button click');
    }); 
 }

1 Ответ

0 голосов
/ 27 августа 2018

Это проблема с событием click.

Событие щелчка состоит из 2 событий: mousedown и mouseup.

Последовательность событий в вашем случае это

1) mousedown 2) фокусировка 3) mouseup

Где 1 и 3 создают событие щелчка.

Это может произойти, когда на странице отображается дополнительный элемент, такой как сообщение об ошибке, и кнопка, по которой должен произойти щелчок, перемещается из своих исходных координат x и y. Следовательно, мышеловка происходит в каком-то другом месте, а не там, где произошел хаос.

Итак, я думаю, что ваш mousedown работает, focusout работает, но mouseup не работает.

Решением этой проблемы является использование события mousedown вместо щелчка. Таким образом, ваш щелчок не должен ждать срабатывания mouseup.

Пример:

<input type="text" (focusout)="someMethod()">
<button (mousedown)="someMethod()">Click Me!</button> //Changed (click) to (mousedown)

Надеюсь, это поможет.

...