fancybox beforeClose问题

时间:2015-01-19 08:28:31

标签: javascript jquery iframe fancybox fancybox-2

我在fancybox(版本2.1.5)iframe中实现了一个表单。人们可以选择不填写表格并点击“X”关闭fancybox表格或者交替填写表格并点击注册。

我有一个beforeClose回调设置来设置Cookie并做一些工作。但我希望只有当有人点击“X”或Esc键时才会触发此操作。见下面的代码

$.fancybox.open({
    type: "iframe",
    href: "/[url].php",
    autoSize: true,
    height: "auto",
    margin: 0,
    padding: 0,
    autoCenter: true,
    maxWidth: 460,
    maxHeight: 615,
    modal: false,
    iframe: {
        scrolling: "no"
    },
    beforeClose: function () {
        //set cookie code
    },
});

但如果有人要注册,它会显示2秒的感谢信息并关闭fancybox。这是通过使用window.parent.$.fancybox.close();完成的,请参阅下面的详细代码

$.post('/register.php', post_vars, function(data) {
    window.parent.$.fancybox.close();
});

但是我不希望调用beforeClose事件,以防我从iFrame关闭它,或者即使它被调用,我需要以某种方式知道它已经从iframe&不使用“X”按钮。

有没有办法区分这个?

2 个答案:

答案 0 :(得分:2)

我可以考虑不同的方法,例如将自定义事件绑定到fancybox 关闭按钮或使用{{捕获转义键1}}或keyup

我想最简单的方法是在父页面中创建,这是一个自定义关闭函数,如:

keypress

当从 iframed 页面调用时,此功能将关闭fancybox(来自父页面本身) AND 将启用(先前定义的)var closedFromIframe = false; function customClose() { closedFromIframe = true; jQuery.fancybox.close(); } flag ,所以代替:

closedFromIframe

......你可以做到

$.post('/register.php', post_vars, function(data) {
    window.parent.$.fancybox.close();
});

然后,在您的fancybox脚本中,您可以在$.post('/register.php', post_vars, function(data) { window.parent.customClose(); }); 回调中验证beforeClose 标志的状态并执行您需要的操作:

closedFromIframe

注意我们还在$.fancybox.open({ // your API options beforeClose : function () { if (closedFromIframe) { // closed from iframe custom function } else { // close button -or- escape key } }, afterClose : function () { closedFromIframe = false; // reset flag } }); 回调中重置了closedFromIframe 标记

查看此实施的 DEMO

答案 1 :(得分:0)

仅当有人点击“X”或Esc键

时才会触发此操作
$(document).ready(function () {

$(".fancybox").fancybox({

            closeClick: false, // prevents closing when clicking INSIDE fancybox 
            openEffect: 'none',
            closeEffect: 'none',
            enableEscapeButton: false,
            helpers: {
                overlay: {
                    closeClick: false // prevents closing when clicking OUTSIDE fancybox 
                }
            },
            beforeClose: function () {
                return confirm('Are you sure?')
            }
        })
    });