2014-08-27 248 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