From 5827031cab50387f4c85af2e51a04c37fb7c10bf Mon Sep 17 00:00:00 2001 From: Erik Arvidsson Date: Tue, 20 May 2014 18:37:46 -0700 Subject: [PATCH] Listeners added in the current dispatch should not get called Fixes https://github.com/Polymer/polymer/issues/511 --- src/wrappers/events.js | 2 +- test/js/events.js | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) 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); + }); });