关闭特定Modal后刷新页面问题:为何两Modal关闭均触发页面刷新?
问题原因分析
你当前的代码给document.body绑定了两次hidden.bs.modal事件处理函数,任何一个Modal关闭时,这两个函数都会被触发。第二个函数里的location.reload()没有做任何判断,所以不管关闭的是#myModal还是#myModal2,页面都会被刷新。
解决方案
这里提供两种靠谱的解决思路:
方案1:给特定Modal单独绑定事件
直接把事件绑定到对应的Modal元素上,这样只有目标Modal关闭时才会触发对应的处理逻辑:
// 仅处理#myModal的关闭,不刷新页面 $('#myModal').on('hidden.bs.modal', function () { $(this).removeData('bs.modal'); }); // 仅处理#myModal2的关闭,同时刷新页面 $('#myModal2').on('hidden.bs.modal', function () { $(this).removeData('bs.modal'); location.reload(); });
方案2:在全局事件中判断关闭的Modal
如果坚持要绑定到document.body,可以通过事件对象的target属性判断当前关闭的是哪个Modal,再执行对应逻辑:
$(document.body).on('hidden.bs.modal', function (e) { const closedModalId = $(e.target).attr('id'); if (closedModalId === 'myModal2') { $('#myModal2').removeData('bs.modal'); location.reload(); // 只有关闭#myModal2时才刷新 } else if (closedModalId === 'myModal') { $('#myModal').removeData('bs.modal'); } });
这两种方法都能精准控制只有#myModal2关闭时才刷新页面,而#myModal关闭时仅清除模态框数据,不会触发刷新。
内容的提问来源于stack exchange,提问作者Neil Deeley
相关产品推荐
相关产品推荐

