2009-09-01 95 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;