Uncaught TypeError: $(...).fancybox is not a function
Uncaught TypeError: $(...).fancybox is not a function
HTML
<div class="test">
<a href="/example/123.html" class="fancybox"> link 1</a>
<a href="/example/123.html" class="fancybox"> link 1</a>
<a href="/example/123.html" class="fancybox"> link 1</a>
</div>
JQuery - 已更新
$('.fancybox').each(function(){
$(this).fancybox({
type: 'ajax',
autoHeight: true,
width: 930,
autoSize: false,
autoCenter: true,
fitToView: false,
topRatio: 0,
arrows: false,
closeBtn: true,
closeClick: true,
autoPlay: false,
openSpeed: 1,
closeSpeed: 'fast',
closeClick: false,
live: true,
helpers: {
overlay: {
openSpeed: 'fast'
}
}
});
});
仅尝试
$('.fancybox').fancybox();
第一个点击 link 将打开 fancybox
。然后下一个点击 link 将不会打开 fancybox
并且只显示空白覆盖。
注意到如果使用 parent.location.reload(true);
,它会刷新整个页面然后显示 fancybox
。那不是我想要的。每次单击不同的 link 时它都应该工作,并且在不刷新的情况下显示 fancybox
。
认为 ajax 它可以让 href 进行处理然后显示 fancybox
但它不起作用:(
另一件事是 Fancybox
似乎被初始化了不止一次。如何防止它被多次初始化?
出现错误:`未捕获类型错误:$(...).fancybox 不是函数
有什么方法可以使 fancybox
工作而无需每次单击 link 时都刷新页面?
已更新
我编辑了上面的代码,但它仍然给我带来麻烦。
我认为你的问题是你正在处理多个 ajax 请求。
Fancybox 支持 ajax 只需使用 :
$("#various3").fancybox({
ajax : {
type : "POST",
data : 'mydata=test'
}
});
并在其中查看通过 AJAX.
调用的 href
属性中的已处理文件的结果
因此在您的代码中,您不需要处理 jquery ajax 并在其中调用 fancybox。相反,您可以在 ajax 模式下调用 fancybox,这样就可以解决问题。
您可以检查 Official FancyBox Site 以使用它处理 AJAX。
至于初始化,这真的取决于你的fancybox js脚本加载。 fancybox javascript 文件将在您的页面中加载一次。
在 html 元素上多次使用 $(element).fancybox({})
不会重新初始化元素内的当前对象,但会通过新调用重置它。也就是说,元素中的fancybox对象被重写了。
更新:
这是一个工作副本,只需在 link 单击时使用 $.fancybox({})
,防止默认事件行为并将所需位置设置为 href 元素本身,确保只导入 jquery一次这样你就不会覆盖它:
<!-- Add jQuery library -->
<script type="text/javascript" src="../lib/jquery-1.10.1.min.js"></script>
<!-- Add fancyBox main JS and CSS files -->
<script type="text/javascript" src="../source/jquery.fancybox.js?v=2.1.5"></script>
<link rel="stylesheet" type="text/css" href="../source/jquery.fancybox.css?v=2.1.5" media="screen" />
<div class="test">
<a href="/example/123.html" class="fancybox_ajax"> link 1</a>
<a href="/example/123.html" class="fancybox_ajax"> link 2</a>
<a href="/example/1236.html" class="fancybox_ajax"> link 3</a>
</div>
<script type="text/javascript">
$(document).ready(function() {
$('.fancybox_ajax').on('click', function(e){
e.preventDefault();
$.fancybox({
width: 400,
height: 400,
autoSize: false,
href: $(this).attr("href"),
type: 'ajax'
});
});
});
</script>
上次更新 - 修复了 jquery 冲突问题
我通过为 jquery 库设置一个新别名来实现它,$ 似乎与随后加载的另一个 javascript 库冲突并且它没有找到 fancybox 插件.. newFiddle
HTML
<div class="test">
<a href="/example/123.html" class="fancybox"> link 1</a>
<a href="/example/123.html" class="fancybox"> link 1</a>
<a href="/example/123.html" class="fancybox"> link 1</a>
</div>
JQuery - 已更新
$('.fancybox').each(function(){
$(this).fancybox({
type: 'ajax',
autoHeight: true,
width: 930,
autoSize: false,
autoCenter: true,
fitToView: false,
topRatio: 0,
arrows: false,
closeBtn: true,
closeClick: true,
autoPlay: false,
openSpeed: 1,
closeSpeed: 'fast',
closeClick: false,
live: true,
helpers: {
overlay: {
openSpeed: 'fast'
}
}
});
});
仅尝试
$('.fancybox').fancybox();
第一个点击 link 将打开 fancybox
。然后下一个点击 link 将不会打开 fancybox
并且只显示空白覆盖。
注意到如果使用 parent.location.reload(true);
,它会刷新整个页面然后显示 fancybox
。那不是我想要的。每次单击不同的 link 时它都应该工作,并且在不刷新的情况下显示 fancybox
。
认为 ajax 它可以让 href 进行处理然后显示 fancybox
但它不起作用:(
另一件事是 Fancybox
似乎被初始化了不止一次。如何防止它被多次初始化?
出现错误:`未捕获类型错误:$(...).fancybox 不是函数
有什么方法可以使 fancybox
工作而无需每次单击 link 时都刷新页面?
已更新
我编辑了上面的代码,但它仍然给我带来麻烦。
我认为你的问题是你正在处理多个 ajax 请求。
Fancybox 支持 ajax 只需使用 :
$("#various3").fancybox({
ajax : {
type : "POST",
data : 'mydata=test'
}
});
并在其中查看通过 AJAX.
调用的href
属性中的已处理文件的结果
因此在您的代码中,您不需要处理 jquery ajax 并在其中调用 fancybox。相反,您可以在 ajax 模式下调用 fancybox,这样就可以解决问题。
您可以检查 Official FancyBox Site 以使用它处理 AJAX。
至于初始化,这真的取决于你的fancybox js脚本加载。 fancybox javascript 文件将在您的页面中加载一次。
在 html 元素上多次使用 $(element).fancybox({})
不会重新初始化元素内的当前对象,但会通过新调用重置它。也就是说,元素中的fancybox对象被重写了。
更新:
这是一个工作副本,只需在 link 单击时使用 $.fancybox({})
,防止默认事件行为并将所需位置设置为 href 元素本身,确保只导入 jquery一次这样你就不会覆盖它:
<!-- Add jQuery library -->
<script type="text/javascript" src="../lib/jquery-1.10.1.min.js"></script>
<!-- Add fancyBox main JS and CSS files -->
<script type="text/javascript" src="../source/jquery.fancybox.js?v=2.1.5"></script>
<link rel="stylesheet" type="text/css" href="../source/jquery.fancybox.css?v=2.1.5" media="screen" />
<div class="test">
<a href="/example/123.html" class="fancybox_ajax"> link 1</a>
<a href="/example/123.html" class="fancybox_ajax"> link 2</a>
<a href="/example/1236.html" class="fancybox_ajax"> link 3</a>
</div>
<script type="text/javascript">
$(document).ready(function() {
$('.fancybox_ajax').on('click', function(e){
e.preventDefault();
$.fancybox({
width: 400,
height: 400,
autoSize: false,
href: $(this).attr("href"),
type: 'ajax'
});
});
});
</script>
上次更新 - 修复了 jquery 冲突问题
我通过为 jquery 库设置一个新别名来实现它,$ 似乎与随后加载的另一个 javascript 库冲突并且它没有找到 fancybox 插件.. newFiddle