如何获得Twitter Bootstrap Modal的调用元素?

cnk*_*nkt 60 javascript modal-dialog twitter-bootstrap

我有一个a用于调用模态的元素:

<a class="btn" data-toggle="modal" data-target="#myModal" href="http://some-url" >Launch Modal</a>
Run Code Online (Sandbox Code Playgroud)

而且,说这是我的模式:

<div class="modal hide" id="myModal">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal">×</button>
    <h3>Modal header</h3>
  </div>
  <div class="modal-body">
    <p>One fine body…</p>
  </div>
  <div class="modal-footer">
    <a href="#" class="btn" data-dismiss="modal">Close</a>
    <a href="#" class="btn btn-primary">Save changes</a>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我可以将函数绑定到由modal触发的事件:

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

我的问题是:如何a从我的事件订阅者函数访问元素 - 它调用模态?

lou*_*lou 101

它在Bootstrap 3.0.0中解决了,谢谢event.relatedTarget.

$('#your-modal').on('show.bs.modal', function (e) {
  var $invoker = $(e.relatedTarget);
});
Run Code Online (Sandbox Code Playgroud)

  • 如果我想知道调用模态隐藏的元素怎么办? (6认同)
  • 在bootstrap 2.3中有没有解决这个问题? (2认同)

小智 16

你必须听:

$('[data-toggle="modal"]').on('click', function() {
    $($(this).attr('href')).data('trigger', this);
});
$('.modal').on('show.bs.modal', function() {
    console.log('Modal is triggered by ' + $(this).data('trigger'));
});
Run Code Online (Sandbox Code Playgroud)

您当然可以用shown.bs.modal或它们触发的任何其他事件替换show.bs.modal.请注意,这适用于Bootstrap 3.0.0.如果您使用2.3.2,则需要摆脱.bs.modal(我认为).

我喜欢这个解决方案是什么:你不必记得谁是这个,自我,和其他代理调用的解决方法.

当然,您必须测试href属性是否不是真正的链接(动态模态加载选项).


小智 7

modal元素有一个名为的数据对象modal,用于保存传递的所有选项.您可以在触发模态的元素上设置'source'数据属性,将其设置为源的ID,然后从options变量中检索它.

触发器将是:

<a id="launch-modal-1" class="btn" data-toggle="modal" data-target="#myModal" href="http://some-url" data-source="#launch-modal-1">Launch Modal</a>
Run Code Online (Sandbox Code Playgroud)

在事件回调中,获取modal数据对象,并查看source选项:

$('#myModal').on('hidden', function () {
  var modal = $(this).data('modal');
  var $trigger = $(modal.options.source);
  // $trigger is the #launch-modal-1 jQuery object
});
Run Code Online (Sandbox Code Playgroud)

  • 这最初似乎对我有用,但只要我有多个来源就停止工作.似乎模态从第一次调用时保留选项,因此无论您首先单击哪个锚,它都将在所有后续操作中使用来自该数据源的数据源. (2认同)