我在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”按钮。
有没有办法区分这个?
答案 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?')
}
})
});