Open a fancybox while another instance of fancybox is open

馋奶兔 提交于 2019-12-21 19:41:13

问题


When the user clicks on a button i show a fancybox that indicates that user should wait till the action is completed:

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

now i check the requested action via $.post function and return the result message (either action was successful or the error why the action failed) and now i want to close the first fancybox and show the new fancybox with the response i got from ajax:

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

The problem is the second fancybox doesn't show. there are many examples on showing a second fancybox when closing the first one (adding to onClosed attribute) but as in this one I don't want to show the second fanybox after closing the first one, I want to show it when the action is completed.


回答1:


You can trigger a second Fancybox any time regardless that there is one already opened (and without closing it first). Just try firing a second Fancybox when the action is completed.

The second Fancybox window (once is triggered) will replace the first one without any further closing command.

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

I set an example page here that starts Fancybox on page load, then it fires a second Fancybox after 10 seconds.

The first Fancybox closes automatically after the second is fired.

UPDATE

Or maybe you would prefer 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

Open fancybox on a button click, then triggers a second fancybox after 10 seconds (or after a process in the background is completed.)



来源:https://stackoverflow.com/questions/8375062/open-a-fancybox-while-another-instance-of-fancybox-is-open

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!