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

时间:2012-07-19 22:37:22

标签: javascript twitter-bootstrap modal-dialog

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

<a class="btn" data-toggle="modal" data-target="#myModal" href="http://some-url" >Launch Modal</a>

而且,说这是我的模式:

<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>

我可以将函数绑定到由modal:

触发的事件
$('#myModal').on('hidden', function () {
  // do something…
})

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

5 个答案:

答案 0 :(得分:99)

由于event.relatedTarget,它已在Bootstrap 3.0.0中解决。

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

答案 1 :(得分: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'));
});

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

我喜欢这个解决方案:你没有必要记住谁是这个自我 和其他代理呼叫解决方法。

当然,你必须测试如果href属性不是真正的链接(动态模态加载选项)。

答案 2 :(得分: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>

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

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

答案 3 :(得分:1)

目前它不是开箱即用的。如果你想自己编辑bootstrap-modal代码,它有一个功能请求和解决方法。

请参阅here

答案 4 :(得分:1)

我有一种情况,我必须绑定一些与“调用者”相关的数据,就像你说的那样。 我设法通过将“click”事件绑定到它并使用如下数据来解决它:

调用者

<img id="element" src="fakepath/icon-add.png" title="add element" data-toggle="modal" data-target="#myModal" class="add">

JS捕获与调用者相关的数据(只是一些代码示例)

$('#element').on('click', function () { // Had to use "on" because it was ajax generated content (just an example)
    var self = $(this);
});

像这样,您可以随心所欲地处理与您的调用者相关的数据。