如何检查页面上是否存在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,它总是会返回它已满。

有任何想法吗?

这应该可以在不测试.length情况下工作

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

但是, :empty会检查文本节点。 所以,如果你有一个换行符,即

 

它可能会窒息。 在这种情况下,将开始和结束标记放在同一行上。

我使用下面的代码:

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

这对我有用

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

我一直在使用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以供参考。

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

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

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

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