mirror of
https://github.com/twbs/bootstrap.git
synced 2024-12-01 13:24:25 +01:00
Fix modal when is triggered by bs-toggle
, to hide other open instances (#34701)
This commit is contained in:
parent
418fe8113e
commit
1e5e655670
@ -63,6 +63,7 @@ const CLASS_NAME_FADE = 'fade'
|
||||
const CLASS_NAME_SHOW = 'show'
|
||||
const CLASS_NAME_STATIC = 'modal-static'
|
||||
|
||||
const OPEN_SELECTOR = '.modal.show'
|
||||
const SELECTOR_DIALOG = '.modal-dialog'
|
||||
const SELECTOR_MODAL_BODY = '.modal-body'
|
||||
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="modal"]'
|
||||
@ -411,6 +412,12 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
|
||||
})
|
||||
})
|
||||
|
||||
// avoid conflict when clicking moddal toggler while another one is open
|
||||
const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)
|
||||
if (allReadyOpen) {
|
||||
Modal.getInstance(allReadyOpen).hide()
|
||||
}
|
||||
|
||||
const data = Modal.getOrCreateInstance(target)
|
||||
|
||||
data.toggle(this)
|
||||
|
@ -978,6 +978,29 @@ describe('Modal', () => {
|
||||
|
||||
trigger.click()
|
||||
})
|
||||
|
||||
it('should call hide first, if another modal is open', done => {
|
||||
fixtureEl.innerHTML = [
|
||||
'<button data-bs-toggle="modal" data-bs-target="#modal2"></button>',
|
||||
'<div id="modal1" class="modal fade"><div class="modal-dialog"></div></div>',
|
||||
'<div id="modal2" class="modal"><div class="modal-dialog"></div></div>'
|
||||
].join('')
|
||||
|
||||
const trigger2 = fixtureEl.querySelector('button')
|
||||
const modalEl1 = document.querySelector('#modal1')
|
||||
const modalEl2 = document.querySelector('#modal2')
|
||||
const modal1 = new Modal(modalEl1)
|
||||
|
||||
modalEl1.addEventListener('shown.bs.modal', () => {
|
||||
trigger2.click()
|
||||
})
|
||||
modalEl1.addEventListener('hidden.bs.modal', () => {
|
||||
expect(Modal.getInstance(modalEl2)).not.toBeNull()
|
||||
expect(modalEl2.classList.contains('show')).toBeTrue()
|
||||
done()
|
||||
})
|
||||
modal1.show()
|
||||
})
|
||||
})
|
||||
|
||||
describe('jQueryInterface', () => {
|
||||
|
@ -528,7 +528,7 @@ Toggle between multiple modals with some clever placement of the `data-bs-target
|
||||
Hide this modal and show the first with the button below.
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-primary" data-bs-target="#exampleModalToggle" data-bs-toggle="modal" data-bs-dismiss="modal">Back to first</button>
|
||||
<button class="btn btn-primary" data-bs-target="#exampleModalToggle" data-bs-toggle="modal">Back to first</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue
Block a user