2012-11-06 26 views
0

創建與InfiniteCarousel問題,我有這樣的一段代碼在網頁中正常工作:的Prototype.js jQuery中

<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
<script src="jquery.infinitecarousel3.min.js"></script> 
<script type="text/javascript" src="easing.js"></script> 
<script> 
    $(function(){ 
     $('#carousel').infiniteCarousel({ 
      imagePath: 'images/' 
     }); 
    }); 
</script> 
<!--<script src="prototype.js"></script>--> 

然而,當我取消對prototype.js線它給出了一個錯誤:

Uncaught TypeError: Cannot call method 'infiniteCarousel' of null.

prototype.js文件是從http://prototypejs.org/,我正在使用它的一些其他功能。我已經Google了很多,但無法提出解決方案 - 我該如何解決?

回答

0

您的Prototype.js庫正在接管$全局變量。你可以用這種方式您的document.ready快捷的範圍內分配變量$ jQuery的:

<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
<script src="jquery.infinitecarousel3.min.js"></script> 
<script type="text/javascript" src="easing.js"></script> 
<script> 
    $(function($){ 
     $('#carousel').infiniteCarousel({ 
      imagePath: 'images/' 
     }); 
    }); 
</script> 
<!--<script src="prototype.js"></script>--> 

$(document).ready()功能,其快捷$(function(){}),發送jQuery的工廠函數作爲第一個參數的回調。命名參數$將在該函數中將本地$變量作爲jQuery範圍。

在未來,我建議把jQuery的在原型,並使用jQuery.noConflict方法放棄的$ jQuery的控制。然後,您可以分配$函數返回的jQuery只在函數內部它是有必要,使用IIFE包裝:

// prototype code using prototype's $ out here 
(function($){ 
    // jQuery code using jQuery's $ goes here 
}(jQuery)); 

在這種特殊情況下,你不需要這麼做,因爲該$(document).ready()方法已經這樣做它您。但是你應該習慣這種工具。

而你應該替換原型。 :)

+0

謝謝!完美的作品。我是網絡編程新手,實際上理解你說的一半。我爲什麼要更換Prototype? – abhishek

+0

沒問題!替換原型,因爲jQuery和原型是競爭對手:包括他們都會在客戶端瀏覽器中運行大量多餘的重複代碼。在一個DOM操作庫上標準化是個好主意,而現在jQuery是事實上的標準。很可能無論Prototype在做什麼,jQuery或純JS都可以做到。 – zetlen