我有一个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
元素?
答案 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);
});
像这样,您可以随心所欲地处理与您的调用者相关的数据。