HTML onClick VS jQuery Время нажатия мыши

Я работаю с устаревшими HTML-страницами, написанными примерно 10 лет назад. При этом следует четко понимать, что рефакторинг старого кода не только НЕэффективен по времени, но и является рискованным занятием.

Устаревшая веб-страница имеет множество кнопок, которые активируют события JavaScript с помощью тега onClick="myFunction()". Мне было поручено связать файл JavaScript (который использует jQuery) с этими устаревшими веб-страницами. Я добавил рассматриваемый файл JavaScript и исходный код jQuery 1.9.1 и прикрепил их к устаревшим HTML-страницам перед закрывающим тегом body, например:

<script src="jquery-1.9.1.min.js"></script>

Этот исходный файл JavaScript (который использует jQuery) активирует событие mousedown на кнопках с прикрепленным классом «getStats», например:

$(document).on('mousedown', '.getStats', function (event) {
    //Stuff
});

Однако, когда jQuery активируется, он НЕ выполняет перенаправление, которое кнопка должна выполнять через событие HTML onClick.

Я не могу найти никакой информации в Интернете о том, как время события HTML onClick и jQuery mousedown происходит, чтобы понять, сталкиваюсь ли я с состоянием гонки. Должны произойти как перенаправление HTML onClick, так и события jQuery mousedown, и я не могу просто вернуться и отредактировать все устаревшие события HTML onClick, которые должны быть выполнены в jQuery, так как это потребует месяцев работы.

Пример jsFiddle: https://jsfiddle.net/koa2hsbp/

jQuery работает сразу же. Если вы закомментируете функцию jQuery mousedown, то HTML onClick будет работать. Но я должен сделать это там, где активируются обе части (предпочтительно jQuery mousedown до HTML onClick), без изменения функциональности HTML. (Опять же, изменение устаревшего кода само по себе является дорогостоящим мероприятием.)


person S. Overflow    schedule 08.12.2015    source источник
comment
В вашем примере события распространяются нормально. Это alert(), который прерывает распространение в обработчик кликов. Изменить: следите за своей консолью: jsfiddle.net/koa2hsbp/1   -  person Antiga    schedule 09.12.2015
comment
@Antiga почти прав - оповещение делает свое дело, но речь идет не об остановке распространения - событие щелчка просто никогда не срабатывает, как это никогда не происходит с оповещением.   -  person Dmitry    schedule 09.12.2015


Ответы (1)


Некоторое объяснение событий:
mousedown — срабатывает сразу после нажатия кнопки мыши во время фокусировки на элементе.
mouseup — срабатывает сразу после того, как кнопка мыши поднимается вверх во время фокусировки на элементе
click — срабатывает при последовательном нажатии mousedown +наведите указатель мыши на тот же элемент.

Итак, в вашем примере вы нажимаете кнопку мыши, и это немедленно запускает код, который создает предупреждение. Затем вы отпускаете кнопку мыши, но веб-страница фокусируется на предупреждении, а не на нашем элементе, поскольку окно предупреждения по своей природе блокирует все остальное и прерывает javascript. Поскольку нет события mouseup, нет и события click, поэтому устаревший код не вызывается.

Попробуйте доказать, что я прав, - нажмите мышью и удерживайте ее. Затем нажмите кнопку ввода - это удалит оповещение. Затем отпустите кнопку мыши, находясь над элементом. Это вызовет щелчок.

К сожалению, в одном и том же примере сложно совместить щелчок мыши и оповещение. Рассмотрите возможность перемещения обработчика jQuery для щелчка, если вам нужны предупреждения. Это приведет к вызову jQuery после устаревшего обработчика.

person Dmitry    schedule 08.12.2015