From 1d292a1a6eeb19918304c28d31b513d05a88c086 Mon Sep 17 00:00:00 2001 From: darylteo Date: Mon, 4 Jan 2016 22:16:45 +1100 Subject: [PATCH 1/2] [FIX] #39 - events on top level Events triggered on top level elements (such as window or document) lead to a HierarchyRequestError due to a fix in IE browsers where dispatchEvent does not fire if an element is not in the DOM. The current test is simply to check for the existence of parentNode However, this means top level elements get added to itself, causing the error. The proposed fix simply tests for top level elements in the test. --- lib/events/trigger.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/events/trigger.js b/lib/events/trigger.js index 998b3a2..0fde9aa 100644 --- a/lib/events/trigger.js +++ b/lib/events/trigger.js @@ -16,7 +16,7 @@ module.exports = function(els, events, opts) { forEachEls(els, function(el) { var domFix = false - if (!el.parentNode) { + if (!el.parentNode && el !== document && el !== window) { // THANKS YOU IE (9/10//11 concerned) // dispatchEvent doesn't work if element is not in the dom domFix = true From b156a4f389c24f9b991dfd00a78965dee683f088 Mon Sep 17 00:00:00 2001 From: darylteo Date: Mon, 4 Jan 2016 22:42:23 +1100 Subject: [PATCH 2/2] [TEST] Test for #39 --- tests/lib/events.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/lib/events.js b/tests/lib/events.js index 0a9a3f8..4eb7824 100644 --- a/tests/lib/events.js +++ b/tests/lib/events.js @@ -90,3 +90,21 @@ tape("test events on/off/trigger for multiple elements, multiple events", functi t.end() }) + +tape("test events on top level elements", function(t) { + var el = document; + + el.className = "" + on(el, "click", classCb) + trigger(el, "click") + t.equal(el.className, "on", "attached callback has been fired properly on document") + + el = window; + + el.className = "" + on(el, "click", classCb) + trigger(el, "click") + t.equal(el.className, "on", "attached callback has been fired properly on window") + + t.end() +})