diff --git a/js/src/util/backdrop.js b/js/src/util/backdrop.js index 4c18e99c08..c05c221ddf 100644 --- a/js/src/util/backdrop.js +++ b/js/src/util/backdrop.js @@ -116,7 +116,11 @@ class Backdrop { EventHandler.off(this._element, EVENT_MOUSEDOWN) - this._getElement().parentNode.removeChild(this._element) + const { parentNode } = this._getElement() + if (parentNode) { + parentNode.removeChild(this._element) + } + this._isAppended = false } diff --git a/js/tests/unit/util/backdrop.spec.js b/js/tests/unit/util/backdrop.spec.js index ae342b0929..02dea5a25b 100644 --- a/js/tests/unit/util/backdrop.spec.js +++ b/js/tests/unit/util/backdrop.spec.js @@ -129,6 +129,25 @@ describe('Backdrop', () => { }) }) + it('should not error if the backdrop no longer has a parent', done => { + const instance = new Backdrop({ + isVisible: true, + isAnimated: true + }) + const getElements = () => document.querySelectorAll(CLASS_BACKDROP) + + instance.show(() => { + instance.hide(() => { + expect(getElements().length).toEqual(0) + + // replace the fixture, which was just wiped out + fixtureEl = getFixture() + done() + }) + document.body.innerHTML = 'changed' + }) + }) + describe('click callback', () => { it('it should execute callback on click', done => { const spy = jasmine.createSpy('spy')