2011-01-13 29 views
32

Kendi Drupal 7 modülümü yazıyorum ve JQuery'yi kullanmak istiyorum.Drupal 7'de JQuery'yi Kullanma

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

O JQuery yüklü değil gibi görünüyor:

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

Ama bu hatayı alıyorum. Aksi halde, $ tanımlanmalıdır.

Aslında başlığındaki o dahil olsa:

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

Ben Drupal içinde JQuery etkinleştirmek için başka bir şey yapmak zorunda mıyım? Drupal tarafından $ yazılıyor mu? web sitesi var

:

alt text

Ama $ başka bir şey tarafından yazılır ediliyor: Firebug göre http://rockfinder.orgapage.de

cevap

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.

yapabilirsiniz Ayrıca sadece Kodunuzdaki $ değişkeni yerine 'jQuery' değişkenini kullanın.

+0

Teşekkürler! Tam olarak aradığım şey bulamadı ve bulamadı! – JochenJung

+3

Bu sözdizimini Javascript'te bilmiyorum. Birisi burada neler olduğunu açıklayabilir mi? –

+2

Temelde $ ile jQuery arasında bir takma ad oluşturur. Yukarıda belirtildiği gibi, bunun nedeni $ 'ı kullanan diğer JS kitaplıklarını dahil etmektir. – Berdir

14

, jQuery dosyası yüklenirken

alt text


Yapmanız gerekenler

ilk gerçek tartışma olur olarak jQuery nesnesini kullanarak kendisini çağıran bir işlevle $ değişkenin kullanımını saklanması geçerli:

(function ($) { 

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

}(jQuery)); 
+0

Öyleyse neden $ tanımlanmamış? Üzerine yazılıyor mu? – JochenJung

+2

Prototip gibi diğer Javascript kitaplıklarıyla çakışmaları önlemek içindir. – Tapirboy

8

Muhtemelen çalışırken karşılaşabilecekleri çok yaygın bir hatadır

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

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

} 

}; 
})(jQuery);  
+0

Bu bir sorunumu çözdü. Ben d7 kullanıyordum. Teşekkürler guta –

+2

'} (jQuery));' 'yerine yerine} kullanmalısınız) (jQuery);' kodunuzun son satırında? – FLY

+0

mutlak bir efsane, işte bu! Herkes dinle, Drupal'da böyle yapıyorsun !! – weaveoftheride

0

"$ bir işlev değil" Drupal.behaviors.YOURTHEMENAME kullanmak gerekecektir, senaryonuz bu şekilde başlatılmadı vardır jQuery ile. Aşağıda verilen herhangi cevapları deneyebilirsiniz:

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

VEYA

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

Temelde bu bizim kod çalıştırmak ve JQuery için $ kısayolu kullanmak sağlayacaktır.