Событие щелчка - получить цель, с которой начался mousedown, а не mouseup - PullRequest
1 голос
/ 06 мая 2019

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

Пример:

  • Пользователь нажимает кнопку мыши на пользовательском всплывающем окне
  • Пользователь перемещает мышь за пределы всплывающего окна и отпускает

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

$(document).click(function(e)
{
    // will return the target during *releasing the mouse button*
    // but how to get the target where the *mouse press started*
    console.log(e.target); 
}

Конечно, я мог бы отследить это вручную, прослушав mousedown и сохранив его в переменной -но у меня скорее есть что-то нативное , потому что:

  • меньше кода
  • Я мог бы пропустить крайние случаи

Оба Jquery иливанильный JavaScript-ответы мне нравятся (но предпочтение ванили)

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Вы можете использовать mousedown вместе с функцией mouseup, и они оба сохранят свои цели в глобальной переменной, а затем сравнят их в операторе if.

let downTarget, upTarget;

$(document).mousedown(function(e) {
    downTarget = e.target;
});

$(document).mouseup(function(e) {
    upTarget = e.target;
});

if(upTarget === downTarget){ 
    *do stuff*
};
0 голосов
/ 06 мая 2019

просто используйте событие mousedown вместо щелчка, как

$(document).mousedown(function(e)
{
    console.log(e.target); 
}

, также есть другое событие, которое проверяет, находится ли мышь над mouseover

...