2010-10-23 1 views
1

FancyBox JQuery вопросJQuery: FancyBox если близко

Если закрыть его, нажав X Я хотел бы получить предупреждение («Вы забыли что-то ..»).

Как я могу это сделать?

  $("a#uploadImage").fancybox({ 
      'titleShow'  : false, 
      'width': 560, 
      'height': 620, 
      'autoDimensions': false, 
      'overlayOpacity': 0.6 
      }); 

ответ

2

Единственный способ, по которому я его вижу, вынуть кнопку закрытия по умолчанию и поставить ее вместо нее.

<a href="#" id="close_fancybox"><img src="x.png" /></a> 

<script> 
    $('#close_fancybox').click(function(){ 
     var confirmation = confirm("You forgot something...?"); 
     if(confirmation) { 
       return false; 
     } else { 
       $.fancybox.close(); 
       return false; 
     } 
    }); 
</script> 
+0

как я могу взять из установленного по умолчанию, и как я могу поместить его в том же месте? – Johnson

+0

На самом деле, я просто понял, вам не нужно вынимать по умолчанию, вы можете использовать идентификатор по умолчанию, который является «fancybox-close», поэтому вместо $ ('# close_fancybox) просто используйте $ ('# fancybox-close') – Claudiu

+0

Беда в том, что исходный обработчик событий (тот, который определен библиотекой) будет по-прежнему активным, и на самом деле он, вероятно, будет работать до вашего нового обработчика. Чтобы действительно иметь возможность * отменить * закрытие окна, вам нужно удалить этот обработчик (или полностью удалить соответствующую разметку). – VoteyDisciple

0

Открыть jquery.fancybox-1.3.2.js и перейти на номер строки 910 вы можете увидеть близкую функцию фантазии box.At этого места

$.fancybox.close = function() { 

    alert("hai"); 

    if (busy || wrap.is(':hidden')) { 

     return; 
    } 
+0

Uhg. Пожалуйста, не защищайте модифицирующий библиотечный код. Это затрудняет обновление библиотеки, что затрудняет поиск изменений (и, следовательно, их сложно поддерживать). – VoteyDisciple

+0

@ VoteyDisciple см. Комментарий пользователя457827 к Claudiu; пользователь хочет только этого – svk

+0

Нет, оригинальный плакат хочет добиться определенного результата. Прямо редактировать библиотечный код - это не так. – VoteyDisciple

5

функция по умолчанию $.fancybox.close, так что я мог бы быть склонен сделать что-то подобное. ..

$.fancybox.originalClose = $.fancybox.close; 
$.fancybox.close = function() { 
    // Do whatever you want. Then do the default behavior: 
    $.fancybox.originalClose(); 
}; 

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

Чтобы изменить поведение только одной конкретной коробки, самое лучшее, чтобы установить modal свойство true (который будет отключить все встроенные методы для закрытия окна), а затем вы можете добавить свои собственные Кнопка «Сохранить» или «Закрыть», которая работает, как вы хотите. Коробка никогда не будет закрываться автоматически, но вы можете закрыть ее, когда будете готовы с функцией $.fancybox.close().

+0

Это действительно круто, не знаю, что вы можете это сделать – Claudiu

+2

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

+0

Спасибо за ответ. Где я должен это иметь? вместе с моей конфигурацией fancybox в функции готовности документа? Я упомянул, что хочу только этого для конкретного fancybox? См. Обновленный Вопрос для моей конфигурации fancybox. Спасибо – Johnson

5

есть обратный вызов «onCleanup», так:

$("a#uploadImage").fancybox({ 
    'titleShow'  : false, 
    'width': 560, 
    'height': 620, 
    'autoDimensions': false, 
    'overlayOpacity': 0.6m, 
    'onCleanup' : function() { 
     return window.confirm('Close?'); 
    } 
}); 
+0

это работает! как я могу предупредить «Хорошо!» если они выбрали Да в поле подтверждения – Johnson

+0

, это просто раздражает действительно – Claudiu

+0

Не так, как я собираюсь это сделать. Просто я знаю, где должен быть мой другой код. – Johnson

 Смежные вопросы

  • Нет связанных вопросов^_^