jquery fancybox-предотвращение закрытия при щелчке за пределами fancybox

Я использую Fancybox плагин для моих модальных окон. Кажется, независимо от того, какие параметры я использую, я не могу предотвратить закрытие модального окна fancybox, когда пользователь щелкает за пределами модального окна fancybox (серая область).

есть ли способ заставить пользователя нажать X или кнопку, которая запускает событие закрытия? Кажется, это должно быть просто, поэтому я надеюсь, что я просто читаю примеры неправильно.

Я пробовал hideOnContentClick: false но это не похоже, что это работает на меня. Есть идеи?

15 ответов


для этого нет опции. Вам придется изменить исходный код.

в jquery.fancybox-1.2.1.js вам нужно прокомментировать (или удалить) строку 341 в методе _finish:

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

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

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

Я использую fancybox 1.3.1, если вы хотите заставить пользователя закрыть модальное поле только нажав на кнопку, Вы можете указать в конфигурации:

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

для этой проблемы, пожалуйста, попробуйте этот путь

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

надеюсь, что это помогает.


Если вы используете Fancybox 1.2.6 (как я на проекте), я узнал опцию hideOnOverlayClick. Вы можете установить его в false (например, hideOnOverlayClick: false).

Я нашел эту опцию, исследуя, чтобы изменить код на основе предложения, данного Скоттом Даудингом.


я столкнулся с такой же "проблемой". Это сработало для меня:

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

ни один из выше работал для меня, поэтому я просто написал простой бит для последней версии 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
    });
});

надеюсь, что это помогает :)


на $("#fancybox-overlay").unbind() решение, данное для этого вопроса @Gabriel, работает, за исключением того, что мне нужно было привязать его к fancybox после загрузки его содержимого, и я не мог немедленно развязать. Для всех, кто сталкивается с этой проблемой, следующий код решил проблему для меня:

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

задержка 400ms заставила его работать на меня. Он работал с 300ms, но я не хотел рисковать.


установить до false внутри вашей функции:

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

    return false;
});

просто добавьте следующую строку в свою функцию, вам не нужно ничего менять в jquery.fancybox-1.2.6.js

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

вы можете предотвратить закрытие необычного окна, применив эти настройки

 '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


мне пришлось использовать комбинацию всех вышеперечисленных ответов, так как все они включают ошибки. Разумеется, редактирование исходного кода не требуется.

в моем случае я хотел отключить оверлейные клики, закрывающие окно, поскольку у меня была прогрессия вопросов, которые будут отображаться последовательно внутри fancybox, поэтому я не хотел, чтобы пользователи теряли свой прогресс, случайно нажав на оверлей, но хотел сохранить эту функциональность в другом месте на странице.

использовать это чтобы отключить его:

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

использовать это, чтобы снова включить его:

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

просто используйте следующий код:

$(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>

вы можете установить closeClick по умолчанию на наложении в false. Работал для меня в версии 2.1.5.

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