未捕获的 TypeError: 对象 [object Object] 没有方法 "fancybox"。

14

我在使用fancybox(2.x)时遇到了一个非常奇怪的问题。我已经使用这个脚本很长时间了,但以前从未遇到过这样的问题。

所以,我有一个网站:http://salomonsuperpark.pl/,我按照手册中的说明包含了每个jquery/fancybox文件,但JS控制台给出了以下错误:

Uncaught TypeError: Object [object Object] has no method 'fancybox'

你有任何想法我做错了什么吗? 任何帮助将不胜感激 :)

6个回答

53

你的网站存在几个问题。

  1. 在引入fancybox插件js前后分别引用了jQuery库两次,导致第二次jQuery库的引用覆盖了已经添加的插件。
  2. 有其他库覆盖了$,所以你的代码无法正常工作,因为 $不再是jQuery的别名。您可以使用jQuery.noConflict()来避免与页面上使用相同变量$的其他库产生冲突。

5
是的,这是由于包含了两次jQuery库(我没有注意到)引起的。谢谢! - mbajur
1
是的,我没有注意到,谢谢和+1。 - Sam
这是正确的。添加了两个jQuery库会导致冲突。 - Francisco Quintero

6
看起来jQuery被包含了两次,一次在head标签的顶部,另一次在底部附近。

2
我曾经遇到过类似的问题。某种原因,jQuery被重复加载了。后来发现,当我测试某些东西时,在一个被禁用的块中添加了一个drupal_add_js行来加载jquery。尽管该块被禁用,但Drupal仍会评估禁用块中的PHP代码。
当我从该块中移除drupal_add_js行时,jQuery在每个页面上正常加载,只加载一次。

1
我在我的网站上有一个CSS统一的PHP脚本,它将jQuery和jQuery postmessage插件添加到同一个JavaScript文件中。
因此,它给了我上面的错误。
我已经单独加载了jQuery postmessage而没有进行统一处理,这样就不再出现错误了。

0

我用这段代码让它正常工作了

<script type="text/javascript">
    (function( $ ) {   
        $(document).ready( function( ) {  
            $("a#fancyBoxLink").fancybox({
                'href'   : '#popupvid',
                'titleShow'  : false,
                'transitionIn'  : 'elastic',
                'transitionOut' : 'elastic'
            });

        });
    })(jQuery);      
</script>

0
Jquery的子库可能包含在主库中,例如,在下载jquery-ui.js时,我已经包含了jquery.ui.sortable.js,并且当我再次添加它时,出现了一个错误。 所以请验证是否已经包含了子库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接