ChatGPT解决这个技术问题 Extra ChatGPT

将函数绑定到 Twitter Bootstrap 模式关闭

我在一个新项目上使用 Twitter Bootstrap 库,我希望页面的一部分在模式关闭时刷新和检索最新的 json 数据。我在文档中的任何地方都没有看到这一点,有人可以向我指出或提出解决方案。

使用记录方法的两个问题

 $('#my-modal').bind('hide', function () {
   // do something ...
 });

我已经将“隐藏”类附加到模态,因此它不会在页面加载时显示,因此会加载两次

即使我删除了隐藏类并将元素 id 设置为 display:none 并将 console.log("THE MODAL CLOSED"); 添加到上面的函数中,当我点击关闭时也没有任何反应。


H
Heemanshu Bhalla

引导程序 3 和 4

$('#myModal').on('hidden.bs.modal', function () {
    // do something…
});

引导程序 3:getbootstrap.com/javascript/#modals-events

引导程序 4:getbootstrap.com/docs/4.1/components/modal/#events

引导程序 2.3.2

$('#myModal').on('hidden', function () {
    // do something…
});

请参阅 getbootstrap.com/2.3.2/javascript.html#modals → 事件


这似乎有效,但由于某种原因,当将鼠标悬停在模态页脚中的按钮上时,它也会触发。该按钮是一个常规的提交按钮: 知道如何在鼠标悬停时不触发 hide 事件吗?或者,我怎样才能检测到它是因为悬停而被解雇的?顺便说一句:即使事件被触发,模式对话框也不会关闭。
我没有在 Bootstrap 3 中看到这种行为,你能做一个小提琴吗?
这个答案可能应该提到 hidden.bs.modal 和 hide.bs.modal 之间的区别。当 CSS 动画完成时会触发 Hidden,但在我的测试中,如果没有动画,它永远不会触发(尽管可能只是一个错误)。如果您正在使用数据管理,则改用 hide.bs.modal 可能更安全,它会在调用 .modal('hide') 时立即触发。 getbootstrap.com/javascript/#modals-usage - 见事件小节。
Bootstrap 3:当我单击标记为 data-dismiss="modal" 的模态标记(如关闭按钮)时它可以工作,但是当我单击模态周围的黑色背景区域时 它不起作用。模式被关闭,但在页面刷新之前无法重新打开。我尝试了 'hidden.bs.modal''hide.bs.modal' 均无济于事。
@marquito 你能做什么(我做什么)是这样使用它:$('#myModal').modal({ backdrop: 'static', keyboard: false });这样,当点击灰色区域时,模式不会关闭,也不会在按下 Esc 键时关闭。
a
aar0n

引导程序 4

$('#my-modal').on('hidden.bs.modal', function () {
  window.alert('hidden event fired!');
});

有关工作示例,请参阅此 JSFiddle:

https://jsfiddle.net/6n7bg2c9/

请参阅此处文档的模态事件部分:

https://getbootstrap.com/docs/4.3/components/modal/#events


a
aesede

启动 Bootstrap 3(编辑:在 Bootstrap 4 中仍然相同)有 2 个实例可以触发事件,它们是:

1.当模态“隐藏”事件开始时

$('#myModal').on('hide.bs.modal', function () { 
    console.log('Fired at start of hide event!');
});  

2.当模态“隐藏”事件完成时

$('#myModal').on('hidden.bs.modal', function () {
    console.log('Fired when hide event has finished!');
});

参考:http://getbootstrap.com/javascript/#js-events


C
CRABOLO

您需要使用“on”事件而不是“live”,但将其分配给文档对象:

利用:

$(document).on('hidden.bs.modal', '#Control_id', function (event) {
// code to run on closing
});

S
SUNny.K
$(document.body).on('hidden.bs.modal', function () {
    $('#myModal').removeData('bs.modal')
});

S
Subodh Ghulaxe

Bootstrap 提供您可以挂接到 modal 的事件,例如,如果您想在模式对用户隐藏完毕后触发 event,您可以使用 hidden.bs.modal 事件像这样

    /* hidden.bs.modal event example */
    $('#myModal').on('hidden.bs.modal', function () {
          window.alert('hidden event fired!');
    })

Documentation 中查看有效的fiddle here,了解有关模态方法和事件的更多信息


m
metamagikum

引导程序 5+ #ES6+

更少的依赖 -> 像其他框架一样,由于新的事件方法,Bootstrap 将回到标准

var myModalEl = document.getElementById('myModalID');
myModalEl.addEventListener('hidden.bs.modal', function (event) {
    // do something...
});

有关工作示例,请参阅此 JSFiddle:

https://jsfiddle.net/Metamagikum/cw5f76bp/3/

官方文档位于此处:

https://getbootstrap.com/docs/5.0/components/modal/


感谢您成为唯一的纯 JS 解决方案 - 我厌倦了假设整个 jQuery 依赖项的最微小的 JavaScript 片段。
s
sendon1982

引导程序 4:

$('#myModal').on('hidden.bs.modal', function (e) {
   // call your method
})

hide.bs.modal:当调用 hide 实例方法时立即触发此事件。

hidden.bs.modal:当模式对用户完成隐藏时触发此事件(将等待 CSS 转换完成)。


t
tkartas

我会这样做:

$('body').on('hidden.bs.modal', '#myModal', function(){ //this call your method });

其余的已经被别人写了。我还建议阅读文档:jquery - on method


T
Tortus

我已经看到很多关于引导事件的答案,例如当模式关闭时触发的 hide.bs.modal

这些事件存在问题:模式中的任何弹出窗口(弹出框、工具提示等)都会触发该事件。

当模态关闭时,还有另一种方法可以捕获事件。

$(document).on('hidden','#modal:not(.in)', function(){} );

当模式打开时,Bootstrap 使用 in 类。使用 hidden 事件非常重要,因为在触发事件 hide 时仍然定义类 in

此解决方案在 IE8 中不起作用,因为 IE8 不支持 Jquery :not() 选择器。


D
Disapamok

如果你想在每个模态关闭时触发一个函数,你可以使用这个方法,

$(document).ready(function (){
    $('.modal').each(function (){
        $(this).on('hidden.bs.modal', function () {
            //fires when evey popup close. Ex. resetModal();
        });
    });
});

所以你不需要每次都指定模态ID。


M
Michael Granger

我和一些人有同样的问题

$('#myModal').on('hidden.bs.modal', function () {
// do something… })

您需要将其放在页面底部,将其放在顶部永远不会触发事件。


我会比这更严格地定义规则。当调用 jQuery 选择器 $("#myModal") 时,ID 为 myModal 的 HTML 元素需要存在于 DOM 中。因此,您可以将此代码放在页面顶部,但放在 $(document).on("ready", function(){ ... }); 中(或在 DOM 填充元素后调用的类似函数)。