Search code examples
javascripteventsdom-eventsstandards

JavaScript event handlers execution order for events separately triggered on elements where neither is an ancestor of the other


Having this JS code:

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();

I'm wondering in what order will the alerts show up - will it be in the order the events were triggered by click() or could it be random?

I'm asking about documented/standardised behaviour, not about what browsers currently implement.


Solution

  • The alerts will be executed in order - 1 and then 2. This is because click event is synchronous (see here) - when .click() is issued the handler will be run immediately (look at the last paragraph here). So this code:

    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');
    

    will produce the same result as

    alert('1');
    alert('2');
    alert('3');