Как вы знаете, события обычно всплывают в javascript, поэтому сначала выполняется обработчик события элемента, который инициирует событие, затем вызывается обработчик события родительского элемента и так далее. Такое поведение вызывает некоторые проблемы в проекте, над которым я сейчас работаю, я бы предпочел поменять порядок выполнения.
Я нашел решение, которое использует таймауты:
$(element).mouseover(function(){
var that = this;
setTimeout(function() {
//actual event handler, but references to "this" are replaced with "that"
},$(this).parents().length)
});
Таким образом, в основном обработчики событий выполняются после короткого времени ожидания, время ожидания зависит от глубины элемента в DOM-дереве:
Обработчик события html-элемента выполняется сразу, обработчик события элемента body выполняется после ожидания 1 мс и так далее. Таким образом, порядок выполнения событий меняется на противоположный.
Результаты моих первых тестов положительные, но я все еще не уверен, есть ли какие-либо проблемы или недостатки с этим решением. Что вы думаете об этом решении? Другие идеи о том, как решить эту проблему, также высоко ценятся.