diff --git a/src/index.js b/src/index.js index ff8078e..bf6fe95 100644 --- a/src/index.js +++ b/src/index.js @@ -9,16 +9,16 @@ const defaults = { function syncEvent(node, eventName, newEventHandler) { const eventNameLc = eventName.toLowerCase(); const eventStore = node.__events || (node.__events = {}); - const oldEventHandler = eventStore[eventName]; + const oldEventHandler = eventStore[eventNameLc]; // Remove old listener so they don't double up. if (oldEventHandler) { - node.removeEventListener(eventName, oldEventHandler); + node.removeEventListener(eventNameLc, oldEventHandler); } // Bind new listener. if (newEventHandler) { - node.addEventListener(eventNameLc, eventStore[eventName] = function handler(e) { + node.addEventListener(eventNameLc, eventStore[eventNameLc] = function handler(e) { newEventHandler.call(this, e); }); } diff --git a/test/unit.js b/test/unit.js index cf26e4e..b6813c2 100644 --- a/test/unit.js +++ b/test/unit.js @@ -1,5 +1,5 @@ import './unit/children'; -import './unit/custom-events'; +import './unit/events'; import './unit/display-name'; import './unit/errors'; import './unit/prop-types'; diff --git a/test/unit/custom-events.js b/test/unit/events.js similarity index 65% rename from test/unit/custom-events.js rename to test/unit/events.js index 600204c..bd5d636 100644 --- a/test/unit/custom-events.js +++ b/test/unit/events.js @@ -42,4 +42,28 @@ describe('custom events', () => { done(); }, 1); }); + + it('should not duplicate handlers', done => { + let count = 0; + const Comp = reactify(document.registerElement('x-custom-event-3', { + prototype: Object.create(HTMLElement.prototype, { + trigger: { + value() { + this.dispatchEvent(new CustomEvent('test')); + }, + }, + }), + }), { React, ReactDOM }); + + const func = () => ++count; + + // Using both ontest and onTest (case-sensitive) test case-sensitivity. + const comp = ReactDOM.render(, window.fixture); + + setTimeout(() => { + ReactDOM.findDOMNode(comp).trigger(); + expect(count).to.equal(1); + done(); + }, 1); + }); });