如何检查页面上是否存在fancybox

时间:2011-07-15 11:09:54

标签: jquery fancybox

我正在尝试检查是否已经加载了fancybox。如果是这样,那么我运行一个ajax脚本将内容放入其中。

如果不是,我打开一个fancybox iframe,它会获取内容。

以下是代码:

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 个答案:

答案 0 :(得分:35)

我使用下面的代码:

if(typeof $.fancybox == 'function') {
     fancy box loaded;
} else {
     fancy box not loaded;
}

答案 1 :(得分:3)

这对我有用

if ($('#fancy_content:empty').length > 0)
{
    alert('Fancybox Open');
}
else
{
    alert('Fancybox NOT Open');
}

答案 2 :(得分:1)

这可以在不对.length

进行测试的情况下运行
if ($('div#fancybox-frame:empty'))

但是,:empty会检查文本节点。因此,如果div有换行符,即

<div id="#fancybox-frame">
</div>
它可能会窒息。在这种情况下,将开始和结束标记放在同一行。

答案 3 :(得分:0)

我一直在使用Fancybox构建一个应用程序,所以我发现我在不同的相关主题上发现我的发现,我发现讨论了我遇到的问题。 Amit Sidhpura的解决方案非常适合检查dom中是否存在Fancybox JS脚本,换句话说,是否存在$ .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以供参考。

答案 4 :(得分:0)

在我的情况下,在这个帖子中,我有一个脚本检查是否通过鼠标移动或键盘活动检测到用户输入。但是,当在fancybox iframe中时,父页面没有检测到活动。

为了调整和补偿这个事实,我让后台运行的脚本知道DOM中是否有一个打开的iframe(因为除了fancybox之外我没有使用iframe),使用以下代码:

/** Model which defines data from the oracle view V_THINGS_TODO which contains blabla NOSONAR */
public class ThingsTodo ... {

您还可以选择让您的iframe内容具有您测量的特定ID或类,但请记住,当动态发起HTML元素时,您必须首先将存在于DOM的现有父选择器作为目标。能够找到你新创建的元素。