bootstrap の Modal を js で扱う時、 hide() すると黒い半透明の背景が残ることがある。
結論から言うと、サンプルコード のボタンでモーダルを表示させていたことが原因だった。
↓原因
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
Launch demo modal
</button>
js で Modal を扱う時、
モーダルを表示する時は js 内で show() を呼んであげないといけない。
但し、閉じる時は js 内で hide() しても、元から用意されている閉じるボタンを使っても同じ挙動っぽい。
以下サンプルコード
import { Modal } from 'bootstrap/dist/js/bootstrap.esm.min.js'
let modal = document.getElementById('modal')
let modalObj = new Modal(modal)
let btnShow = document.getElementById('btnShow')
let btnSave = document.getElementById('btnSave')
// <button type="button" id="btnShow">開く</button>
btnShow.addEventListener('click', (e) => {
modalObj.show()
})
// <button id="btnSave" type="button" class="btn btn-primary">Save changes</button>
btnSave.addEventListener('click', (e) => {
// 何か処理する
// ~~~
// 最後に hide() で閉じてみる
modalObj.hide()
})
<button type="button" id="btnShow">開く</button>
<div class="modal fade" id="modal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<button id="btnSave" type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>