diff --git a/packages/metal-dom/src/domNamed.js b/packages/metal-dom/src/domNamed.js index 77a77052..6bb6030b 100644 --- a/packages/metal-dom/src/domNamed.js +++ b/packages/metal-dom/src/domNamed.js @@ -216,7 +216,12 @@ export function buildFragment(htmlString) { * @return {boolean} */ export function contains(element1, element2) { - return element1.contains(element2); + if (isDocument(element1)) { + // document.contains is not defined on IE9, so call it on documentElement instead. + return element1.documentElement.contains(element2); + } else { + return element1.contains(element2); + } } /** diff --git a/packages/metal-dom/src/events.js b/packages/metal-dom/src/events.js index 3afdb142..63756e32 100644 --- a/packages/metal-dom/src/events.js +++ b/packages/metal-dom/src/events.js @@ -1,7 +1,7 @@ 'use strict'; import {isServerSide} from 'metal'; -import {registerCustomEvent} from './dom'; +import {registerCustomEvent, contains} from './dom'; import features from './features'; /** @@ -23,7 +23,7 @@ function registerEvents() { // eslint-disable-next-line if ( !related || - (related !== target && !target.contains(related)) + (related !== target && !contains(target, related)) ) { event.customType = eventName; return callback(event); diff --git a/packages/metal-dom/test/dom.js b/packages/metal-dom/test/dom.js index fdd8122b..525d1cbc 100644 --- a/packages/metal-dom/test/dom.js +++ b/packages/metal-dom/test/dom.js @@ -175,13 +175,13 @@ describe('dom', function() { dom.append(element1, element2); dom.enterDocument(element3); - assert.ok(dom.contains(element1, element2)); - assert.ok(dom.contains(document, element3)); + assert.isTrue(dom.contains(element1, element2)); + assert.isTrue(dom.contains(document, element3)); - assert.ok(!dom.contains(element1, element3)); - assert.ok(!dom.contains(element2, element1)); - assert.ok(!dom.contains(document, element1)); - assert.ok(!dom.contains(document, element2)); + assert.isFalse(dom.contains(element1, element3)); + assert.isFalse(dom.contains(element2, element1)); + assert.isFalse(dom.contains(document, element1)); + assert.isFalse(dom.contains(document, element2)); }); });