En utilisant JQuery dans Drupal 7
-
10-10-2019 - |
Question
J'écris mon propre module Drupal 7, et d'utiliser comme JQuery en elle.
$('#field').toggle();
Mais je reçois cette erreur:
TypeError: Property '$' of object [object DOMWindow] is not a function
Il semble que JQuery est pas chargé. Dans le cas contraire devrait être défini $.
Bien que je fait inclure dans l'en-tête:
<script type="text/javascript" src="http://rockfinder.de/misc/jquery.js?v=1.4.4"></script>
Dois-je faire quoi que ce soit d'autre pour activer JQuery dans Drupal? Est-$ par Drupal être écrasé?
C'est le site: http://rockfinder.orgapage.de
La solution
A partir du guide de mise à niveau Drupal 7:
Javascript doit être compatible avec d'autres bibliothèques que jQuery par l'ajout d'un petit emballage autour de votre code existant:
(function ($) { // Original JavaScript code. })(jQuery);
Le pas de volonté globale $ plus se référer à l'objet jquery. Cependant, cette la construction, la variable locale $ se référer à jquery, permettant à votre le code d'accès par jQuery $ De toute façon, alors que le code ne sera pas conflit avec d'autres bibliothèques qui utilisent des le global $.
Vous pouvez aussi utiliser la variable 'jQuery' au lieu de la variable $ dans votre code.
Autres conseils
Selon Firebug, votre fichier jQuery est chargé:
Mais le $
est écrasé par quelque chose d'autre:
Ce que vous devez faire est encapsulent l'utilisation de la variable $
avec une fonction qui se invoque en utilisant l'objet jQuery
comme premier argument est réel:
(function ($) {
// in this function, you can use the $ which refers to the jQuery object
}(jQuery));
Il y a des chances que votre script n'est pas initialisé cette façon, vous devrez utiliser Drupal.behaviors.YOURTHEMENAME
(function ($) {
Drupal.behaviors.YOURTHEMENAME = {
attach: function(context, settings) {
/*Add your js code here*/
alert('Code');
}
};
})(jQuery);
Vous pouvez créer le fichier séparé pour js et que le fichier d'ajouter à l'aide de ce qui suit:
drupal_add_js('path', 'module_name');
« $ n'est pas une fonction » est une erreur très commune que vous pouvez rencontrer en travaillant avec jQuery. Vous pouvez essayer toutes les réponses ci-dessous:
(function($){
//your can write your code here with $ prefix
})(jQuery);
ou
jQuery(document).ready(function($){
//Write your code here
});
En gros, cela permettra à notre code à exécuter et utilisez le raccourci $ pour JQuery.