我希望能够通过Bootstrap的模态插件在页面上使用多个不同的链接重用一个模态div:
<h3>This button shows a modal (<code>#utility</code>) with text "Phasellus <em>tincidunt gravida</em>..."</h3>
<br />
<a id="file_attach" data-toggle="modal" href="http://fiddle.jshell.net/jhfrench/6K8rD/show/" data-target="#utility" class="btn">Modal 1</a><br />
<h3>This button should invoke the same modal (<code>#utility</code>), but fill it with text "Phasellus <em>egestas est eu</em>..."</h3>
<br />
<a id="file_attach" data-toggle="modal" href="http://fiddle.jshell.net/jhfrench/AWSnt/show/" data-target="#utility" class="btn">Modal 2</a><br />
<!-- Modal -->
<div id="utility" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="myModalLabel">Click outside modal to close it</h3>
</div>
<div class="modal-body">
<p>One fine body…this is getting replaced with content that comes from passed-in href</p>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
<button class="btn btn-primary">Save changes</button>
</div>
</div>
我希望点击任一链接(它们被设置为按钮)会调用模态并加载带有与所点击按钮对应的页面(值href
)的模态。相反,模态始终会加载您首先单击的链接的内容;模式不会“刷新”内容,而应由“其他”链接href
指定。
我认为这是一个Bootstrap错误,但我在这里问这个问题,以防我错误地使用它。
答案 0 :(得分:15)
经过进一步研究,我发现了一些提及此行为here和here的Bootstrap问题。我已经要求重新开启issue 5514。
与此同时,这个jQuery会修补问题*:
$('a[data-toggle="modal"]').on('click', function(){
// update modal header with contents of button that invoked the modal
$('#myModalLabel').html( $(this).html() );
//fixes a bootstrap bug that prevents a modal from being reused
$('#utility_body').load(
$(this).attr('href'),
function(response, status, xhr) {
if (status === 'error') {
//console.log('got here');
$('#utility_body').html('<h2>Oh boy</h2><p>Sorry, but there was an error:' + xhr.status + ' ' + xhr.statusText+ '</p>');
}
return this;
}
);
});
请参阅http://jsfiddle.net/jhfrench/qv5u5/51/了解实例。*
* - 由于某种原因,有时当你点击小提琴中的按钮时,模态将显示为空白。这在我正在使用的应用程序中不是问题,因此我怀疑这是与此问题/答案无关的问题。
答案 1 :(得分:5)
我不需要编写模态的html标记并通过javascript操作它,而是使用Bootstrap-Dialog来简化一切:
$('.modal-btn').click(function(event){
var $link = $(this);
new BootstrapDialog({
title : 'Load content of : ' + $link.attr('href'),
content : $('<div>Loading...</div>').load($link.attr('href')),
buttons : [{
label : 'Close',
onclick : function(dialog){
dialog.close();
}
}, {
label : 'Save changes',
cssClass: 'btn-primary',
onclick : function(dialog){
alert('The content of the dialog is: ' + dialog.getBody().html());
dialog.close();
}
}]
}).open();
event.preventDefault();
});
在此处查看实时演示,它会加载您在示例中提供的两个网址: http://jsfiddle.net/txrM8/
查看有关Bootstrap-Dialog的更多信息: http://nakupanda.github.io/bootstrap-dialog/