afterShow 点击事件中未定义的 fancybox
fancybox undefined in afterShow click event
我在页面加载时调用了以下代码:
$('#postcodes-link').fancybox({
type: 'ajax',
minWidth: 800,
minHeight: 400,
afterShow: function () {
$('table.data-table > tbody > tr').on('click', function () {
$.fancybox.close();
});
}
});
现在可以正常打开 fancybox (fiddle example),但是当我单击该行时,它不会关闭 fancybox,只会抛出以下错误:
Uncaught TypeError: Cannot read property 'close' of undefined
然而,如果我将上面的内容变成 jQuery 函数:
(function ($) {
$.fn.setUp = function () {
return $(this).each(function () {
$(this).fancybox({
type: 'ajax',
minWidth: 800,
minHeight: 400,
afterShow: function () {
$('table.data-table > tbody > tr').on('click', function () {
$.fancybox.close();
});
}
});
});
};
})(jQuery);
并在我调用顶部代码的相同位置调用以下代码
$('#postcodes-link').setUp();
fancybox 现在将关闭 (fiddle example)。我的问题是为什么第一个不起作用而第二个起作用,我怎样才能使第一个起作用?我认为这与 fancybox 的范围有关,但我希望第二个不能工作,因为它包含在另一个函数中
请注意,我已经尝试了各种尝试关闭花式框的版本:
$.fn.fancybox.close()
jQuery.fancybox.close()
parent.$.fn.fancybox.close()
$('.fancybox-close').trigger('click') //tried this one as a dirty hack but didn't work either
好的,所以我在尝试让 fiddle 复制错误时发现了问题所在:
在 table 页面上,我使用了 jQuery data-table 插件,因此我包含了加载它所需的所有脚本。当我 ajax 将页面加载到模式中时,这意味着 jQuery 正在当前页面上第二次加载。这导致了我看到的错误。
删除 jquery 脚本使 fancybox 按照我的意愿或其他解决方法工作(如果您希望目标页面在未以模式打开时仍然工作 - 例如,如果您有其他链接到该页面page) 那么你将不得不使用 fancybox iframe 而不是 fancybox ajax modal
我在页面加载时调用了以下代码:
$('#postcodes-link').fancybox({
type: 'ajax',
minWidth: 800,
minHeight: 400,
afterShow: function () {
$('table.data-table > tbody > tr').on('click', function () {
$.fancybox.close();
});
}
});
现在可以正常打开 fancybox (fiddle example),但是当我单击该行时,它不会关闭 fancybox,只会抛出以下错误:
Uncaught TypeError: Cannot read property 'close' of undefined
然而,如果我将上面的内容变成 jQuery 函数:
(function ($) {
$.fn.setUp = function () {
return $(this).each(function () {
$(this).fancybox({
type: 'ajax',
minWidth: 800,
minHeight: 400,
afterShow: function () {
$('table.data-table > tbody > tr').on('click', function () {
$.fancybox.close();
});
}
});
});
};
})(jQuery);
并在我调用顶部代码的相同位置调用以下代码
$('#postcodes-link').setUp();
fancybox 现在将关闭 (fiddle example)。我的问题是为什么第一个不起作用而第二个起作用,我怎样才能使第一个起作用?我认为这与 fancybox 的范围有关,但我希望第二个不能工作,因为它包含在另一个函数中
请注意,我已经尝试了各种尝试关闭花式框的版本:
$.fn.fancybox.close()
jQuery.fancybox.close()
parent.$.fn.fancybox.close()
$('.fancybox-close').trigger('click') //tried this one as a dirty hack but didn't work either
好的,所以我在尝试让 fiddle 复制错误时发现了问题所在:
在 table 页面上,我使用了 jQuery data-table 插件,因此我包含了加载它所需的所有脚本。当我 ajax 将页面加载到模式中时,这意味着 jQuery 正在当前页面上第二次加载。这导致了我看到的错误。
删除 jquery 脚本使 fancybox 按照我的意愿或其他解决方法工作(如果您希望目标页面在未以模式打开时仍然工作 - 例如,如果您有其他链接到该页面page) 那么你将不得不使用 fancybox iframe 而不是 fancybox ajax modal