Twitter bootstrap模态隐藏事件只触发一次

use*_*682 7 javascript modal-dialog twitter-bootstrap jquery-events

我正在使用其上定义了单个模态的页面("#agenda-modal").当点击一个触发器(.agenda-item)时,我正在显示这个带有远程内容的模态,如下所示:

$("body").on("click", ".agenda-question", function(e){
  var url = <build my url here>;
  $("#agenda-modal").modal({
    remote: url
  });
});
Run Code Online (Sandbox Code Playgroud)

这很好用(我正在使用$ body.on,因为.agenda-items是通过javascript添加的).

当模态关闭时,我想重新加载页面的一部分(模态内部的表单修改的部分).所以我正在使用:

$("#agenda-modal").on("hidden", function(){
  alert("hidden");
});
Run Code Online (Sandbox Code Playgroud)

当然,一切都包括在内

$(function() {...});
Run Code Online (Sandbox Code Playgroud)

这有效,但只有一次!当我第一次加载页面并单击触发器时,模态会加载,当我关闭模式时,警报就会发生.如果我再次点击相同的触发器,模态会再次显示,但这次关闭警报时不会发生!

我不知道,但这是因为听众 - ("隐藏",功能......) - 不再"束缚"了吗?我想.on会永远抓住这个事件吗?

模态的代码是直接推特:

<div class="modal hide fade" id="agenda-modal">
  <div class="modal-body"></div>
  <div class="modal-footer">
    <button class="btn" data-dismiss="modal">Close</button>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我真的想在模式关闭时捕获,以便我可以更新本来会被更改的页面部分.

使用rails btw,不确定是否重要......

小智 9

更改

$("#agenda-modal").on("hidden", function() {
  alert("hidden");
});
Run Code Online (Sandbox Code Playgroud)

$(document).on('hidden.bs.modal', '#agenda-modal', function () {    
  alert("hidden");
});
Run Code Online (Sandbox Code Playgroud)


use*_*682 0

无法弄清楚这一点 - 一切看起来都不错,但是有相当数量的 js 是由 Rails 管道添加的,所以我不能排除某些东西干扰我的 js 的可能性。

现在改用 jquery 的本机模态。