Порядок выполнения обработчиков событий JavaScript - PullRequest
7 голосов
/ 16 августа 2011

Имея этот код JS:

document.getElementById('e1').addEventListener('click', function(){alert('1');}, false);
document.getElementById('e2').addEventListener('click', function(){alert('2');}, false);
document.getElementById('e1').click();
document.getElementById('e2').click();

Мне интересно, в каком порядке будут отображаться оповещения - это будет в том порядке, в котором события были вызваны click() или это может быть случайным?

Я спрашиваю о задокументированном / стандартизированном поведении, а не о том, какие браузеры в настоящее время реализуют.

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Предупреждения будут выполняться в следующем порядке - 1, а затем 2.Это происходит потому, что событие click является синхронным (см. здесь ) - когда выдается .click(), обработчик запускается немедленно (посмотрите последний абзац здесь ).Поэтому этот код:

document.getElementById('e1').addEventListener('click', function(){alert('1');}, false);
document.getElementById('e2').addEventListener('click', function(){alert('2');}, false);
document.getElementById('e1').click();
document.getElementById('e2').click();
alert('3');

даст тот же результат, что и

alert('1');
alert('2');
alert('3');
0 голосов
/ 16 августа 2011

Я буду 1, а затем 2.http://jsfiddle.net/kkYfX/

...