2011-01-13 67 views
32

我正在編寫自己的Drupal 7模塊,並且喜歡在其中使用JQuery。在Drupal 7中使用JQuery

$('#field').toggle(); 

但我發現了這個錯誤:

TypeError: Property '$' of object [object DOMWindow] is not a function 

似乎jQuery是沒有加載。否則應該定義$。

雖然我實際上它包含在頭:

<script type="text/javascript" src="http://rockfinder.de/misc/jquery.js?v=1.4.4"></script> 

我必須做別的激活的JQuery在Drupal? $被Drupal覆蓋了嗎?

這就是網站:http://rockfinder.orgapage.de

回答

89

From the Drupal 7 upgrade guide:

Javascript should be made compatible with other libraries than jQuery by adding a small wrapper around your existing code:

(function ($) { 
    // Original JavaScript code. 
})(jQuery); 

The $ global will no longer refer to the jquery object. However, with this construction, the local variable $ will refer to jquery, allowing your code to access jQuery through $ anyway, while the code will not conflict with other libraries that use the $ global.

您也可以直接在代碼中使用'jQuery'變量而不是$變量。

+0

謝謝!這正是我正在尋找和找不到的! – JochenJung 2011-01-13 15:04:53

14

據Firebug的,你的jQuery正在加載文件:

alt text

$正在被別的東西覆蓋:

alt text


你應該做的是封裝使用$變量與調用本身使用jQuery對象,因爲它是第一個實際參數的函數:

(function ($) { 

// in this function, you can use the $ which refers to the jQuery object 

}(jQuery)); 
+0

所以..爲什麼$未定義?它是否被覆蓋? – JochenJung 2011-01-13 14:53:25

+2

這是爲了避免與其他Javascript庫(如Prototype)發生衝突。 – Tapirboy 2012-01-24 12:58:08

8

機會是你的腳本沒有初始化這樣,你將不得不使用Drupal.behaviors.YOURTHEMENAME

(function ($) { 
Drupal.behaviors.YOURTHEMENAME = { 
attach: function(context, settings) { 

/*Add your js code here*/ 
alert('Code'); 

} 

}; 
})(jQuery);  
0

「$不是一個函數」是在工作,你可能會面臨一個很常見的錯誤與jQuery。你可以試試下面給出任何答案:

(function($){ 
//your can write your code here with $ prefix 
})(jQuery); 

OR

jQuery(document).ready(function($){ 
//Write your code here 
}); 

基本上,這將使我們的代碼運行,並使用$快捷的jQuery。