2011-01-13 9 views
32

Piszę własny moduł Drupal 7 i lubię używać JQuery.Używanie JQuery w Drupalu 7

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

Ale ja dostaję ten błąd:

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

Wydaje się, że JQuery nie jest załadowany. W przeciwnym razie należy zdefiniować $.

Choć właściwie to ona w nagłówku:

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

Czy muszę zrobić coś jeszcze, aby aktywować JQuery w Drupal? Czy $ jest nadpisywane przez Drupala?

To strona: http://rockfinder.orgapage.de

Odpowiedz

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.

można też po prostu użyj zmiennej "jQuery" zamiast zmiennej $ w twoim kodzie.

+0

Dzięki! Właśnie tego szukałem i nie mogłem znaleźć! – JochenJung

+3

Nie jestem zaznajomiony z tą składnią w JavaScript. Czy ktoś mógłby wyjaśnić, co tu się dzieje? –

+2

Zasadniczo tworzy alias z $ do jQuery. Jak wspomniano powyżej, powodem tego jest włączenie innych bibliotek JS, które używają $. – Berdir

14

Według Firebug, plik jQuery jest załadowany:

alt text

Ale $ jest zastępowane przez coś innego:

alt text


Co należy zrobić, to enkapsulacji użycia zmiennej $ z funkcji, która powołuje się przy użyciu obiektu jQuery jak jest to pierwszy rzeczywisty argumentem:

(function ($) { 

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

}(jQuery)); 
+0

Więc .. dlaczego $ nie jest zdefiniowane? Czy jest nadpisywany? – JochenJung

+2

Pozwala to uniknąć konfliktów z innymi bibliotekami JavaScript, takimi jak prototyp. – Tapirboy

8

Szanse są skrypt nie jest zainicjowany w ten sposób, będziesz musiał użyć Drupal.behaviors.YOURTHEMENAME

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

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

} 

}; 
})(jQuery);  
+0

Ten rozwiązał mój problem. Używałem d7. Dzięki guus –

+2

nie powinieneś używać '} (jQuery));' zamiast '}) (jQuery);' na ostatniej linii twojego kodu? – FLY

+0

jesteś absolutną legendą, to jest to! Wszyscy słuchajcie, tak to robicie w Drupalu !!!! – weaveoftheride

0

„$ nie jest funkcją” to bardzo częsty błąd, który może napotkać podczas pracy z jQuery. Można próbować żadnych odpowiedzi na podane poniżej:

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

LUB

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

Zasadniczo pozwoli to nasz kod do uruchomienia i korzystania z $ skrótu dla jQuery.