как проверить, существует ли уже fancybox на странице - PullRequest
8 голосов
/ 15 июля 2011

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

Если нет, я открываю iframe fancybox, и он загружает контент.

Вот код:

if ($('div#fancybox-frame:empty').length >0) { 
    alert('it is empty');

$.fancybox({
   'width': '80%',
    'height': '80%',
    'autoScale': true,
    'transitionIn': 'fade',
    'transitionOut': 'fade',   
    'type': 'iframe', 
    'href': '/show_photo'
});
 }
 else{
    alert('it is full');   
    $.ajax({
        type: "GET",
        url: "/show_photo",
        success: function(data){
        cropping_arrived();
        }
    });
  }
});

Всегда возвращается, что он заполнен, даже если я знаю, что не открыт fancybox.

Есть идеи?

Ответы [ 5 ]

35 голосов
/ 11 марта 2012

Я заставил его работать с кодом ниже:

if(typeof $.fancybox == 'function') {
     fancy box loaded;
} else {
     fancy box not loaded;
}
3 голосов
/ 25 января 2012

Это работает для меня

if ($('#fancy_content:empty').length > 0)
{
    alert('Fancybox Open');
}
else
{
    alert('Fancybox NOT Open');
}
1 голос
/ 15 июля 2011

Это должно работать без тестирования для .length

if ($('div#fancybox-frame:empty'))

Однако :empty проверяет текстовые узлы.Так что если у вас div есть разрыв строки, то есть

<div id="#fancybox-frame">
</div>

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

0 голосов
/ 26 апреля 2018

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

Чтобы настроить и компенсировать этот факт, я дал знать скрипту, работающему в фоновом режиме, если в DOM есть открытый iframe (как яя не использую iframes, кроме fancybox), используя следующий код:

if ($('body iframe').length > 0)
{
    console.log('Fancybox Open');
}
else
{
    console.log('Fancybox NOT Open');
}

Вы также можете выбрать, чтобы у содержимого iframe был определенный ID или класс, который вы измеряете, однако имейте в виду, что когда HTMLэлемент инициируется динамически, сначала вы должны нацелиться на существующий родительский селектор, который присутствовал в DOM, чтобы найти ваш вновь созданный элемент.

0 голосов
/ 12 декабря 2014

Я создавал приложение с использованием Fancybox, поэтому я публикую свои выводы в различных связанных темах, где я нахожу обсуждение обсуждаемых проблем. Решение Amit Sidhpura отлично подходит для проверки наличия JS-скрипта Fancybox в dom или, другими словами, наличия плагина $ .fancybox.

Тем не менее, он не сообщает вам, была ли инициализирована Fancybox или нет. Для этого вы можете сделать следующее:

function fancyboxIsInit() {
    var fbInit = false;
    if( typeof $.each( $(document).data('events') !== 'undefined' ) {
        $.each( $(document).data('events').click, function(i, v) {
            if( v.namespace === 'fb-start' ) fbInit = true;
        });
    }
    return fbInit;
}

Или следующее:

function fancyboxIsInit() {
    var fbInit = false;
    if (typeof $._data(document, 'events') !== 'undefined') {
        $.each($._data(document, 'events').click, function (i, v) {
            if (v.namespace === 'fb-start') fbInit = true;
        });
    }
    return fbInit;
}

В зависимости от используемой версии jQuery.

JSFiddle:

Проверьте это JsFiddle для справки.

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