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
    });
});

Надеюсь это поможет:)

Установить closeClick параметр в false внутри вашей функции:

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

    return false;
});

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

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

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

Просто добавьте следующую строку в вашу функцию, вам не нужно ничего менять в 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

получить настройки fancy box по следующей ссылке

http://www.fancybox.net/api

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

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

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

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

Используйте это, чтобы отключить это:

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

Используйте это, чтобы повторно включить это:

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

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

$.fancybox.helpers.overlay.defaults.closeClick=false;
Другие вопросы по тегам