我正在尝试检查是否已经加载了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,它总是会返回它已经满了。
有什么想法吗?
答案 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以供参考。
答案 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的现有父选择器作为目标。能够找到你新创建的元素。