将功能绑定到Twitter Bootstrap Modal Close

Bil*_*ull 509 jquery modal-dialog twitter-bootstrap

我正在一个新项目上使用Twitter Bootstrap lib,我想要部分页面刷新并检索模态关闭时的最新json数据.我在文档中的任何地方都没有看到这个,有人可以指出它或建议解决方案.

使用记录的方法有两个问题

 $('#my-modal').bind('hide', function () {
   // do something ...
 });
Run Code Online (Sandbox Code Playgroud)

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

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

小智 1081

Bootstrap 3和4

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

Bootstrap 3:getbootstrap.com/javascript/#modals-events

Bootstrap 4:getbootstrap.com/docs/4.1/components/modal/#events

Bootstrap 2.3.2

$('#myModal').on('hidden', function () {
    // do something…
});
Run Code Online (Sandbox Code Playgroud)

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

  • 这个答案应该提到hidden.bs.modal和hide.bs.modal之间的区别.当CSS动画完成时,隐藏会被触发,但在我的测试中,如果没有动画,它就永远不会发射(虽然可能只是一个bug).如果您正在使用数据管理,那么使用hide.bs.modal会更安全,只要调用.modal('hide')就会触发.http://getbootstrap.com/javascript/#modals-usage - 请参阅事件子部分. (6认同)
  • @marquito你可以做什么(我做的)是这样使用它:`$('#myModal').modal({backdrop:'static',keyboard:false});`那样,模态不会单击灰色区域时关闭,按Esc键时也不会关闭. (5认同)
  • 这似乎有效,但出于某种原因,将鼠标悬停在模态页脚中的按钮上时,它也会触发。该按钮是一个常规的提交按钮: <input type="submit" class="btn btn-info" value="Go" /> 知道如何在将鼠标悬停在它上面时不触发隐藏事件吗?或者,我怎么能检测到它是因为悬停而被发射的?顺便说一句:即使事件被触发,模态对话框也不会关闭。 (3认同)
  • 我没有看到Bootstrap 3的这种行为,你能做一个小提琴吗? (2认同)
  • Bootstrap 3:当我点击标记为`data-dismiss ="modal"`的模态标签(如关闭按钮)时,它可以正常工作,但**当我点击模态周围的黑色背景区域时**它不起作用**.该模式被解除,但在页面刷新之前无法重新打开.我试过''hidden.bs.modal'和'hide.bs.modal'都无济于事. (2认同)

aar*_*r0n 120

Bootstrap 4

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

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

http://jsfiddle.net/aq9Laaew/120440/

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

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


aes*_*ede 45

启动Bootstrap 3(编辑:Bootstrap 4中仍然相同)有2个实例,您可以在其中启动事件,其中:

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

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

2. 当模态"隐藏"事件结束时

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

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

  • 非常适合显示2个事件。像我这样的初学者最好注意,此事件必须置于触发事件的模式下方。 (2认同)

Osc*_*car 16

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

使用:

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

  • 如果动态添加模态,您必须这样做。为我节省了大量时间。 (3认同)

SUN*_*y.K 13

$(document.body).on('hidden.bs.modal', function () {
    $('#myModal').removeData('bs.modal')
});
Run Code Online (Sandbox Code Playgroud)


met*_*kum 9

引导程序 5+ #ES6+

更少的依赖-> 与其他框架一样,Bootstrap 将回归标准,这要归功于新的事件方法

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

请参阅此 JSFiddle 了解工作示例:

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

官方文档位于此处:

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

  • 感谢您成为唯一的纯 JS 解决方案 - 我厌倦了假设完全依赖 jQuery 的最微小的 JavaScript 片段。 (2认同)

Sub*_*axe 6

引导提供您可以挂接到事件模式一样,如果你想火一个,事件当模式已完成从用户被隐藏,你可以使用 hidden.bs.modal事件这样

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

检查一个工作小提琴在这里阅读文档中有关模态方法和事件的更多信息


sen*_*982 5

引导程序 4:

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

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

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


小智 5

我会这样做:

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

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