2014-08-27 131 views
0

我是一个新的jQuery程序员,这里是我的头代码:冲突与jQuery脚本

<script type="text/javascript" src="/file/js/prototype.js"></script> 
<script type="text/javascript" src="/file/js/scriptaculous.js?load=effects,builder"></script> 
<script type="text/javascript" src="/file/lightbox/js/lightbox.js"></script> 

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

<script> 
    function myfunction(){ 
    $("button").click(function(){ 
     $("p").hide(); 
    }; 
    }); 
    $(document).ready(myfunction); 
</script> 

这个脚本作品完美,但是当我在页面中添加这些其他三个脚本

车控制台错误给了我:在

Uncaught TypeError: undefined is not a function 

'$(文件)。就绪(myfunction的);'线。

什么是错误?是冲突问题吗?

+0

你能缩小到这三个js文件中的一个吗?这会让其他人更容易猜测可能会出现什么问题。 – 2014-08-27 21:22:48

+2

http://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/ – 2014-08-27 21:24:05

+0

你确定你的脚本完美吗?我的控制台返回'未捕获的SyntaxError:意外的令牌)' – Kamil 2014-08-27 21:25:30

回答

3

Prototype.js还使用全局$变量。你需要确保他们不会使用jQuery变量,而不是相互冲突:

// wrap it up 
(function($) { 
    function myfunction() { 
    $("button").click(function(){ 
     $("p").hide(); 
    }); 
    }; 
    $(document).ready(myfunction); 
})(jQuery); 

你也可以代替所有的jQuery $jQuery使用,但上述方法通常更容易实现和维护。

+0

现在我的脚本正常工作,但其他人已经出现问题。 lightbox显示在页面底部 – Luca 2014-08-27 22:15:51

+0

@PhantomFav确保你使用'jQuery'作为使用jQuery的代码,使用'Prototype'作为使用Prototype的代码。由于发生冲突,请勿在全局中使用'$'。 – tcooc 2014-08-27 22:20:28

+0

哎呀,我忘了CSS,我的坏,谢谢你的答案 – Luca 2014-08-27 22:27:35

6

jQuery定义了一个您试图使用的名为$的函数。

prototype.js还定义了一个名为$的函数并覆盖jQuery中的函数。

使用jQuery来引用jQuery函数而不是$

+1

你可能想用['jQuery.noConflict()'](http://api.jquery.com/jquery.noconflict/)使jQuery恢复其声明'$ '全球。 – GolezTrol 2014-08-27 21:27:57

+1

j应该是小写。 – Quentin 2014-08-27 21:51:03