2013-03-27 108 views
28

我正在使用jQuery litebox。添加JS和CSS文件後,我得到這個錯誤TypeError:

$(...).on is not a function at this line in js file           
"return $('body').on('click',  
'a[rel^=lightbox], area[rel^=lightbox]', function(e) {" 

任何人都可以幫我理解這裏的問題嗎?

我在CakePHP 1.3中執行此實現。

+4

你確實包括jQuery的版本1.7或更高版本,以及你做了總結您在document.ready中的代碼正確嗎? – adeneo 2013-03-27 22:02:51

+0

是的,我已經添加jquery 1.7 – user1613870 2013-03-27 22:03:29

+0

我還沒有實現任何代碼燈箱,但如果我只是添加js和css文件我得到這個錯誤 – user1613870 2013-03-27 22:04:18

回答

26

這樣做的通常的原因是,你使用的原型,MooTools的,或者說利用了$符號的一些其他圖書館,而你的jQuery包括後庫,因此該庫是「獲勝「(本身爲$)。因此$的返回值不是jQuery實例,所以它沒有jQuery方法(如on)。

您可以使用jQuery與其他庫,但如果你這樣做,你必須使用jQuery符號,而不是它的別名$,如:

jQuery('body').on(...); 

而且,如果你加入這通常最好是後立即您script標籤包括jQuery的,一個包括其他圖書館前:

<script>jQuery.noConflict();</script> 

...如果您加載OTH雖然它不是需要呃在jQuery之後的庫(這是如果你先加載其他庫)。

儘管在頁面權重方面,在同一頁面上使用多個全功能DOM操作庫並不理想。所以如果你只能堅持Prototype/MooTools /無論或只是jQuery,那通常會更好。

+0

克勞德,感謝您的指導方針,我沒有添加任何庫jQuery之前,所有圖書館已添加jQuery庫後。我使用這種技術<?php echo $ html-> css('skin/lightbox.css','stylesheet');數組('inline'=> false)); ?> – user1613870 2013-03-27 22:13:18

+1

@ user1613870:正如我所說的,如果你在** jQuery(如Prototype或MooTools)之後包含另一個庫**,則會出現此問題。 (如果你在*之前把它們放進*,如果你在*之前做過*,你會遇到不同的問題。)你使用的是Prototype還是MooTools? – 2013-03-27 22:18:08

49

問題可能在於您使用的是舊版本的jQuery。如果使用的是舊版本的jQuery

(function($) { 
//my jquery 
})(jQuery); 
8

這個問題就解決了,在我的情況下,通過在封裝我的jQuery (< 1.7),那麼你可以使用「綁定」而不是「開」。這隻會在你使用舊版本時才起作用,因爲從jQuery 3.0開始,「bind」已被棄用。

3

:因爲舊版本的jQuery有「活」的方法,而不是「開」

相關問題