JQuery Fancy Box - PullRequest
       3

JQuery Fancy Box

2 голосов
/ 01 марта 2011

Я использую необычную коробку для редактирования контента в моем бэк-офисе.Я недавно добавил менеджер изображений, который я создаю с помощью JavaScript.Это что-то вроде необычной коробки, но мне пришлось делать это с нуля, чтобы она могла перекрывать первую.Моя проблема заключается в следующем: я хочу, чтобы пользователь мог нажать клавишу выхода, чтобы закрыть мой менеджер, но если я использую $(window).keypress

, когда я нажимаю клавишу esc, оба поля закрываются.Я пытался $(window).unbind('keypress'), когда я начинаю загружать свою коробку, и я пытался просмотреть файл fancybox js, но он свернут.

Кто-нибудь знает, как я могу отключить и впоследствии включить клавишу выходаво время выполнения) на fancybox?

Thanx

Ну, я попытался e.preventDefault (), который я забыл, все еще ничего.Я посмотрел на распакованный JS-файл, и я получил это:

_set_navigation = function() {
            if (currentOpts.enableEscapeButton || currentOpts.enableKeyboardNav) {
                $(document).bind('keydown.fb', function(e) {
                    if (e.keyCode == 27 && currentOpts.enableEscapeButton) {
                        e.preventDefault();
                        $.fancybox.close();

                    } else if ((e.keyCode == 37 || e.keyCode == 39) && currentOpts.enableKeyboardNav && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') {
                        e.preventDefault();
                        $.fancybox[ e.keyCode == 37 ? 'prev' : 'next']();
                    }
                });
            }...  

это какая-то помощь?

1 Ответ

1 голос
/ 01 марта 2011

Так что это работает, но это определенно хак.

function closeImageManager(){

    $(document).unbind('keydown.fb');

    // Insert code to close your image manager

    $(document).bind('keydown.fb', function(e) {
        if (e.keyCode == 27) {
            e.preventDefault();
            $.fancybox.close();

        } else if ((e.keyCode == 37 || e.keyCode == 39) && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') {
            e.preventDefault();
            $.fancybox[ e.keyCode == 37 ? 'prev' : 'next']();
        }
    });

}

По сути, у вас есть функция close, которая делает следующее:

  • Отмена привязки пространства имен keydown event
  • Закройте окно
  • Перепривязать событие keydown с пространством имен к общедоступному $.fancybox.close();

Проблемы с этим:

  • Когда closeImageManager повторно связывает событие keydown, он не будет проверять currentOpts.enableEscapeButton или currentOpts.enableKeyboardNav, потому что эти параметры не отображаются публично.
  • Требуется повторениекод, который связывает событие keydown (один раз в fancybox.js и один раз в функции closeImageManager).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...