我使用Bootstrap模式显示pdf
我希望当用户关闭模态时(通过点击关闭或点击外部的mdoal)新的模态打开
对于打开模态我的Pdf,我使用以下代码:
<a class="btn btn-primary show-pdf" title="exemple" href="./parcel.php">PDF</a>
<script type="text/javascript">
(function(a){a.twModalPDF=function(b){defaults={title:"Parcel",message:"Fail",closeButton:true,scrollable:false};var b=a.extend({},defaults,b);var c=(b.scrollable===true)?'style="max-height: 1020px;overflow-y: auto;"':"";html='<div class="modal fade" id="oModalPDF">';html+='<div class="modal-dialog modal-lg">';html+='<div class="modal-content">';html+='<div class="modal-body" '+c+">";html+=b.message;html+="</div>";html+='<div class="modal-footer">';if(b.closeButton===true){html+='<button type="button" class="btn btn-primary" data-dismiss="modal">Fermer</button>'}html+="</div>";html+="</div>";html+="</div>";html+="</div>";a("body").prepend(html);a("#oModalPDF").modal().on("hidden.bs.modal",function(){a(this).remove()})}})(jQuery);
$(function(){
$('.show-pdf').on('click',function(){
var sUrl = $(this).attr('href');
var sTitre = $(this).attr('title');
var sIframe = '<object type="application/pdf" data="'+sUrl+'" width="100%" height="500">Aucun support</object>';
$.twModalPDF({
title:sTitre,
message: sIframe,
closeButton:true,
scrollable:false
});
return false;
});
})
</script>
它运作良好,打开新模式我有这个,但它们不起作用......
<div class="modal fade" id="Finish" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Attention</h4>
</div>
<div class="modal-body">
....
</div>
<div class="modal-footer">
<div class="col-md-5">
<button type="button" class="btn btn-success btn-lg col-xs-12 margin-bottom" data-dismiss="modal">No</button>
</div>
<div class="col-md-7">
<form action="./forms/success.php" method="post">
<button type="submit" name="saveDispatching" value="1" class="btn btn-lg btn-default col-xs-12">Yes</button>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
$('.modal').click(function(e){
e.preventDefault();
$('#oModalPDF')
.modal('hide')
.on('hidden.bs.modal', function (e) {
$('#Finish').modal('show');
$(this).off('hidden.bs.modal'); // Remove the 'on' event binding
});
});
</script>
我该怎么办? 谢谢你的帮助
答案 0 :(得分:1)
我认为你应该在隐藏模态之前监听hidden.bs.modal
事件。现在你正在隐藏模态,然后开始侦听隐藏的事件,因为模态已经被隐藏,所以不会被触发。
$('.modal').click(function(e){
e.preventDefault();
$('#oModalPDF')
.on('hidden.bs.modal', function (e) {
$('#Finish').modal('show');
$(this).off('hidden.bs.modal'); // Remove the 'on' event binding
})
.modal('hide');
});
我不知道你是否在制作任何动画,但如果不是,你甚至不必听一个事件,你可以简单地隐藏模态并在点击时打开一个新的模式:
$('.modal').click(function(e){
e.preventDefault();
$('#oModalPDF').modal('hide');
$('#Finish').modal('show');
});
答案 1 :(得分:1)
尝试组织这样的代码:
$(function(){
$('.show-pdf').on('click',function(){
var sUrl = $(this).attr('href');
var sTitre = $(this).attr('title');
var sIframe = '<object type="application/pdf" data="'+sUrl+'" width="100%" height="500">Aucun support</object>';
$.twModalPDF({
title:sTitre,
message: sIframe,
closeButton:true,
scrollable:false
});
$('#oModalPDF').on('hidden.bs.modal', function (e) {
console.log('e', e);
$('#Finish').modal('show');
$(this).off('hidden.bs.modal'); // Remove the 'on' event binding
});
return false;
});
我的JSFiddle example
<强>更新强>
如果使用PHP解析处理程序脚本标记,则可以尝试这种方法。
你仍然在模态初始化中有$('#oModalPDF').on('hidden.bs.modal', ... )
处理程序,但你也有:
window.dialogOnCloseHandler = null;
在关闭事件后存储你的callack。在全球范围内存储某些内容是错误模式。所以你应该为你的情况重构那个回调存储。
$(document).ready(function(){
window.dialogOnCloseHandler = null;
$('.show-pdf').on('click',function(e){
e.preventDefault();
var sUrl = $(this).attr('href');
var sTitre = $(this).attr('title');
var sIframe = '<object type="application/pdf" data="'+sUrl+'" width="100%" height="500">Aucun support</object>';
$.twModalPDF({
title:sTitre,
message: sIframe,
closeButton:true,
scrollable:false
});
$('#oModalPDF').on('hidden.bs.modal', window.dialogOnCloseHandler);
});
})
你的关闭后事件回调脚本:
$(document).ready(function(){
window.dialogOnCloseHandler = function (e) {
console.log('e', e);
$('#Finish').modal('show');
$(this).off('hidden.bs.modal'); // Remove the 'on' event binding
};
});
在这里,您只需使用处理程序更新window.dialogOnCloseHandler
属性。
JSFiddle example
答案 2 :(得分:1)
我还没有完全测试过,但我相信你不需要添加代码
$('#oModalPDF').modal('hide').on('hidden.bs.modal', function (e) {
$('#Finish').modal('show');
$(this).off('hidden.bs.modal'); // Remove the 'on' event binding
});
在你写的$('.modal').click
事件中。
$('#modalID1') //the modal id which upon closing triggers the next modal
.on('hidden.bs.modal'){
$('#Finish').modal('show');
}
这样做的是,一旦上一个模态关闭,它将触发下一个模态的show事件。