2013-02-01 4 views
3

Если я зарегистрирую два прослушивателя событий к одному и тому же целевому объекту. Какой обработчик событий будет вызываться первым?Слушатели событий к тому же целевому объекту, который называется первым

Пример:

document.addEventListener("click", function() { 
    // do something 1 
}, true); // using the capturing phase 

document.addEventListener("click", function() { 
    // do something 2 
}, true); // using the capturing phase 

Я не нашел свой ответ в спецификации W3C.

DOM-Level-3-Events

+0

Возможный дубликат [Есть обработчики событий в JavaScript, вызываемые по порядку?] (Http://stackoverflow.com/questions/2706109/are-event-handlers-in-javascript-called-in-order) –

+0

Попробуйте в разные браузеры http://jsbin.com/azuzef/1/edit, Google Chrome и Firefox, похоже, в порядке добавления слушателя. –

+2

[Спецификация HTML5] (http://www.w3.org/TR/DOM-Level-3-Events/#event-flow) говорит: «Список всех прослушивателей событий, зарегистрированных на текущей цели в их порядок регистрации "и" реализация должна обрабатывать все обработчики событий-кандидатов по порядку ". – pimvdb

ответ

1

Жирный курсив, чтобы ответить на этот вопрос (через w3c спецификации: http://www.w3.org/TR/DOM-Level-3-Events/#event-phase)

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

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

Наконец, реализация должна обрабатывать все обработчик событий кандидата в порядке и запуск каждого обработчика, если выполняются все следующие условия ...

Я лично всегда полагался на таком поведении, и у меня есть не видно, что современный браузер ведет себя иначе, чем описывает спецификация.

Смежные вопросы