Skip to content

Commit d05c42a

Browse files
authored
fix: change dismiss handler, listening to key down, instead of click (#36401)
1 parent a877c5d commit d05c42a

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

js/src/modal.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ const EVENT_HIDDEN = `hidden${EVENT_KEY}`
3030
const EVENT_SHOW = `show${EVENT_KEY}`
3131
const EVENT_SHOWN = `shown${EVENT_KEY}`
3232
const EVENT_RESIZE = `resize${EVENT_KEY}`
33-
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`
33+
const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`
3434
const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`
3535
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
3636

@@ -221,7 +221,7 @@ class Modal extends BaseComponent {
221221
}
222222
})
223223

224-
EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {
224+
EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
225225
if (event.target !== event.currentTarget) { // click is inside modal-dialog
226226
return
227227
}

js/tests/unit/modal.spec.js

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -641,9 +641,10 @@ describe('Modal', () => {
641641

642642
modalEl.addEventListener('shown.bs.modal', () => {
643643
const spy = spyOn(modal, '_queueCallback').and.callThrough()
644+
const mouseDown = createEvent('mousedown')
644645

645-
modalEl.click()
646-
modalEl.click()
646+
modalEl.dispatchEvent(mouseDown)
647+
modalEl.dispatchEvent(mouseDown)
647648

648649
setTimeout(() => {
649650
expect(spy).toHaveBeenCalledTimes(1)
@@ -709,13 +710,19 @@ describe('Modal', () => {
709710
fixtureEl.innerHTML = '<div class="modal"><div class="modal-dialog"></div></div>'
710711

711712
const modalEl = fixtureEl.querySelector('.modal')
713+
const dialogEl = modalEl.querySelector('.modal-dialog')
712714
const modal = new Modal(modalEl)
715+
716+
spyOn(modal, 'hide')
717+
713718
modalEl.addEventListener('shown.bs.modal', () => {
714-
modalEl.click()
715-
})
719+
const mouseDown = createEvent('mousedown')
716720

717-
modalEl.addEventListener('hidden.bs.modal', () => {
718-
expect(document.querySelector('.modal-backdrop')).toBeNull()
721+
dialogEl.dispatchEvent(mouseDown)
722+
expect(modal.hide).not.toHaveBeenCalled()
723+
724+
modalEl.dispatchEvent(mouseDown)
725+
expect(modal.hide).toHaveBeenCalled()
719726
resolve()
720727
})
721728

0 commit comments

Comments
 (0)