diff --git a/src/wrappers/events.js b/src/wrappers/events.js index b25d999..c383c1d 100644 --- a/src/wrappers/events.js +++ b/src/wrappers/events.js @@ -382,7 +382,7 @@ targetTable.set(event, target); currentTargetTable.set(event, currentTarget); - for (var i = 0; i < listeners.length; i++) { + for (var i = 0, len = listeners.length; i < len; i++) { var listener = listeners[i]; if (listener.removed) { anyRemoved = true; diff --git a/test/js/events.js b/test/js/events.js index 4ddccac..049ae47 100644 --- a/test/js/events.js +++ b/test/js/events.js @@ -1404,4 +1404,38 @@ test('retarget order (multiple shadow roots)', function() { assert.equal(errorCount, 1); }); + test('add during dispatch', function() { + var div = document.createElement('div'); + var fCount = 0; + var gCount = 0; + var hCount = 0; + + function f() { + fCount++; + div.addEventListener('click', g); + } + + function g() { + gCount++; + div.addEventListener('click', h); + } + + function h() { + hCount++; + } + + div.addEventListener('click', f); + + div.click(); + assert.equal(fCount, 1); + + div.click(); + assert.equal(fCount, 2); + assert.equal(gCount, 1); + + div.click(); + assert.equal(fCount, 3); + assert.equal(gCount, 2); + assert.equal(hCount, 1); + }); });