2015-12-08 3 views
0

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

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

<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, независимо от того, встречаю ли я состояние гонки. Должны произойти как события onclick redirect, так и jQuery mousedown, и я не могу просто вернуться и редактировать все устаревшие события HTML onClick, которые будут выполняться в jQuery, так как это займет месяцы работы.

Образец jsFiddle: https://jsfiddle.net/koa2hsbp/

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

+0

В вашем примере события распространяются нормально. Это 'alert()', который прерывает распространение для обработчика кликов. Изменить: смотреть консоль: https://jsfiddle.net/koa2hsbp/1/ – Antiga

+0

@Antiga почти прав - предупреждение делает трюк, но речь идет не о прекращении распространения - событие click просто не запускается, так как это никогда не случается с предупреждением , – Dmitry

ответ

0

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

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

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

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