Проверьте, если jQuery "Fancybox" уже зарегистрирован? - PullRequest
2 голосов
/ 30 августа 2011

Я заново создаю необычную коробку jQuery так:

        $(document).ready(function() {

        $("#help").fancybox({
            'width': '90%',
            'height': '90%',
            'autoScale': true,
            'transitionIn': 'elastic',
            'transitionOut': 'none',
            'titleShow': false,
            'type': 'iframe'
        });
         });

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

Псевдокод:

 //check if fancybox has not been registered
if($("help").fancybox == null))
{
     //register fancy box
}

Ответы [ 4 ]

3 голосов
/ 30 августа 2011

Когда запускается fancybox, он добавляет fancybox запись в объект data jQuery.

Вы можете проверить его наличие:

if( ! $("#help").data().fancybox )
{
     //register fancy box
}
2 голосов
/ 30 августа 2011

Fancybox использует $ (element) .data () для хранения связанной с ним конфигурации.Вам просто нужно проверить, существует ли fancybox.

$("#fancy").data("fancybox");

См. скрипка для получения дополнительной информации.

1 голос
/ 30 августа 2011

Эта функция ищет ваш #help элемент и загружает файл fancybox.js, только если он присутствует. После успешной загрузки Fancybox.js он вызовет функцию успеха и запустит ваш fancybox.

Это повлияет только на страницы с элементом #help. Таким образом, вы сохраняете HTTP-запросы и пропускную способность.

См .: http://api.jquery.com/jQuery.ajax/

Вам также следует поискать error function, который позволяет обрабатывать ошибки.

$(document).ready(function() {

    // Look for #help
    if ( $('#help').html() !== null ) {

        // Load, init and config the fancybox
        $.ajax({
            url: '/js/path/to/fancybox.js',
            type: 'GET',
            dataType: 'script',
            success: function() {

                // Init Fancybox
                $("#help").fancybox({
                    'width': '90%',
                    'height': '90%',
                    'autoScale': true,
                    'transitionIn': 'elastic',
                    'transitionOut': 'none',
                    'titleShow': false,
                    'type': 'iframe'
                });
            }
        });

    }
});
0 голосов
/ 11 апреля 2013

Немного поздно, но для Fancybox 2 я использую:

parent.jQuery.fancybox.isOpen

Я думаю, что вы также можете использовать:

parent.jQuery.fancybox.isOpened

Оба утверждения вернут true, если на сайте открыт fancybox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...