2009-09-01 539 views
10

我为我的模态窗口使用Fancybox插件。无论我使用什么选项,似乎都无法阻止fancybox模式窗口在用户单击fancybox模式窗口(灰色区域)之外时关闭。jquery fancybox - 防止在fancybox之外点击关闭

有没有办法强制用户点击X或我触发关闭事件的按钮?这看起来应该很简单,所以我希望我只是读了错误的例子。我试过hideOnContentClick: false但这似乎不适合我。有任何想法吗?

+1

它适用于你给的那个网站链接,你有任何代码? – waqasahmed 2009-09-01 18:06:44

+0

正确,但在所有示例中,如果您单击它关闭的模式窗口之外。我希望它保持打开状态,除非用户点击X(没有其他地方)。 – Mike 2009-09-01 18:08:43

回答

4

没有选择。你将不得不改变源代码。

在jquery.fancybox-1.2.1.js你需要注释掉(或删除)线341在_finish方法:

//$("#fancy_overlay, #fancy_close").bind("click", $.fn.fancybox.close); 
+0

非常好。我评论了该行并添加了: $(“#fancy_close).bind(”click“,$ .fn.fancybox.close); 这正是我所需要的,谢谢! – Mike 2009-09-01 19:21:22

+1

有一个选项cool_dev回答下面,编辑代码会导致问题,当您需要更新时,您的更改将被覆盖 – 2012-07-13 14:47:03

+0

您是如何阅读该文件。有一种方法来转换缩小的Js? – 2014-01-08 09:50:22

1

以下行添加到您的功能,你不必在jquery.fancybox-1.2.6.js的

callbackOnStart : function() {$("#fancy_overlay").bind("click","null");}, 
+0

我们只想要这种行为我们的花式框改变了源是不是一个选项,谢谢! – spilliton 2010-01-20 20:09:08

+0

刚刚发现,这不适用于谷歌Chrome浏览器,还没有找到为什么呢 – spilliton 2010-02-02 21:59:03

7

我使用的fancybox 1.3.1,如果你想强制用户只需通过点击按钮,关闭模式对话框改变什么,你可以在指定配置:

<script type="text/javascript"> 
    $(document).ready(function() { 
    $("#your_link").fancybox({ 
     'hideOnOverlayClick':false, 
     'hideOnContentClick':false 
    }); 
    }); 
</script> 
+0

非常感谢!使用fancybox 1.3.4 – 2015-07-14 20:18:20

+1

Doesn' t工作在fancybox 2.0+ – Josh1billion 2016-01-04 22:22:22

11
<script type="text/javascript"> 
    $(document).ready(function() { 
    $("#your_link").fancybox({ 
     'hideOnOverlayClick':false, 
     'hideOnContentClick':false 
    }); 
    }); 
</script>        
3

我遇到了同样的“问题”。这为我工作:

$("#fancybox-overlay").unbind(); 
+1

版本2.1.4他们可以将其更改为$(“。fancybox-ov erlay“)解除绑定(); – loQ 2013-05-20 15:19:39

23
jQuery(".lightbox").fancybox({ 
     helpers  : { 
      overlay : { 
       speedIn : 0, 
       speedOut : 300, 
       opacity : 0.8, 
       css  : { 
        cursor : 'default' 
       }, 
       closeClick: false 
      } 
     }, 
    }); 
+2

这实际上并没有回答使用fancybox v1.2.1的原始问题。对于v1.2.6和v1.3.4之间的版本,请参阅@ cool_dev的答案。对于fancybox 2.x请参阅http://stackoverflow.com/a/8404587/1055987 – JFK 2013-10-24 17:16:33

+0

适合我!感谢代码非常有帮助! – 2013-11-19 06:42:19

3

以上都不是为我工作,所以我就写了的fancybox的最新版本的简单一点。

function load(parameters) { 
    $('.fancybox-outer').after('<a href="javascript:;" onclick="javascript:{parent.$.fancybox.close();}" class="fancybox-item fancybox-close" title="Close"></a>'); 
} 

$(document).ready(function() { 
    $(".various").fancybox({ 
     modal: true, 
     afterLoad: load 
    }); 
}); 

希望这有助于:)

+1

最新版本fancybox检查http://stackoverflow.com/a/8404587/1055987 – JFK 2012-10-12 17:10:56

2

由@Gabriel这个问题给出的解决方案$("#fancybox-overlay").unbind()除了工作,我需要加载的内容后,将其绑定到的fancybox,我不能马上解除绑定。对于谁运行到这个问题的人,下面的代码解决了这个问题对我来说:

$('.fancybox').fancybox({'afterLoad' : function() { 
    setTimeout(function() { $("#fancybox-overlay").unbind(); }, 400);} 
}); 

的400ms的延迟得到它为我工作。它与300ms一起工作,但我不想冒险。

5

如果你正在使用Fancybox 1.2.6(就像我在一个项目上),我发现了选项hideOnOverlayClick。您可以将其设置为false(例如hideOnOverlayClick:false)。

我发现这个选项时,根据Scott Dowding提供的建议修改代码。

0

我不得不使用上述所有答案的组合,因为它们都包含错误。当然,不需要编辑源代码。

在我的情况下,我想关闭覆盖点击关闭框,因为我有一系列问题可以在fancybox内顺序显示,所以我不希望用户因意外地点击叠加层而失去进度,但希望在页面的其他地方保持该功能。

使用该禁用它:

$(".fancybox-overlay").unbind(); 

使用此功能重新启用它:

$(".fancybox-overlay").bind("click", $.fancybox.close); 
0

只需使用下面的代码:

$(document).ready(function() { 
    $("a#Mypopup").fancybox({ 
     "hideOnOverlayClick" : false, // prevents closing clicking OUTSIE fancybox 
     "hideOnContentClick" : false, // prevents closing clicking INSIDE fancybox 
     "enableEscapeButton" : false // prevents closing pressing ESCAPE key 
    }); 
    $("a#Mypopup").trigger('click'); 
}); 

<a id="Mypopup" href="images/popup.png"><img alt="Mypopup" src="images/popup.png" /></a> 
2

设置closeClick参数虚假里面你的功能:

$(".video").click(function() { 
    $.fancybox({ 
     width: 640, 
     height: 385, 
     helpers: { 
      overlay: { 
       closeClick: false 
      } 
     } 
    }); 

    return false; 
}); 
+1

请不要喊,特别是不** **粗体** :-) – kleopatra 2013-11-05 23:29:52

1

可以防止花式盒应用这些设置

'showCloseButton'=>false, // hide close button from fancybox 
'hideOnOverlayClick'=>false, // outside of fancybox click disabled 
'enableEscapeButton'=>false, // disable close on escape key press 

收得到的fancybox从以下链接

http://www.fancybox.net/api

6

对于这一问题的设置,请尝试这种方式

$("YourElement").fancybox({ 
helpers: { 
     overlay: { closeClick: false } //Disable click outside event 
    } 

希望这有助于。

+0

这实际上并没有回答原来的问题,这使用fancybox v1.2.1。对于v1.2.6和v1.3.4之间的版本,请参阅@ cool_dev的答案。对于fancybox 2.x请参阅http://stackoverflow.com/a/8404587/1055987 – JFK 2014-11-18 03:38:32

+0

@JKF:谢谢我会提高我的知识 – David 2014-11-27 07:30:40

-1

您可以将默认的关闭点击重叠设置为false。在2.1.5版本中为我工作。

$.fancybox.helpers.overlay.defaults.closeClick=false;