当另一个fancybox实例打开时打开一个fancybox

时间:2011-12-04 11:48:46

标签: jquery fancybox

当用户点击按钮时,我会显示一个指示用户应该等到操作完成的fancybox:

jQuery(document).ready(function () {
             $.fancybox('Please Wait...',{'modal':true});
        });

现在我通过$ .post函数检查请求的操作并返回结果消息(操作成功或错误操作失败的原因)现在我想要关闭第一个fancybox并显示带有响应的新fancybox来自ajax:

$.post('someurl.aspx',{'somethingtopost':'value'},
function(data){
jQuery(document).ready(function () {
$.fancybox(data);
         });
     }
);

问题是第二个fancybox没有显示。关闭第一个fancybox时会有很多例子显示第二个fancybox(添加到onClosed属性)但是在这个中我不希望在关闭第一个fanybox之后显示第二个fanybox,我想在动作是时显示它完成。

1 个答案:

答案 0 :(得分:7)

您可以随时触发第二个Fancybox,无论是否已经打开过(并且不先关闭它)。只需在动作完成后尝试触发第二个Fancybox。

第二个Fancybox窗口(一旦被触发)将替换第一个没有任何进一步关闭命令。

function openFancybox() {
    setTimeout( function() {$('#delayed').trigger('click'); },10000);
}
$(document).ready(function() {
    $('#pageLoad').fancybox({
        helpers: {overlay:{opacity: 0.3}}
    }).click();
    openFancybox();
    $('#delayed').fancybox({
        helpers: {overlay:{opacity: 0.3}}
    });
}); // ready

我设置example page here在页面加载时启动Fancybox,然后在10秒后触发第二个Fancybox。

第一个Fancybox会在第二个Fancybox被触发后自动关闭。

<强>更新

或者您可能更喜欢this version

function openFancybox() {
    setTimeout( function() {$('#delayed').trigger('click'); },10000);
}
$(document).ready(function() {
    $('#goProcess').click(function(){
        $.fancybox({
            href: '#wait',
            modal: true,
            helpers: {overlay:{opacity: 0.3}},
            afterLoad: function() {
                openFancybox();
            }
        }); // fancybox
    });
    $('#delayed').fancybox({
        helpers: {overlay:{opacity: 0.3}}
    });
}); // ready

单击按钮打开fancybox,然后在10秒后触发第二个fancybox (或在后台处理完成后。)