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 по следующей ссылке
Просто используйте следующий код:
$(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;