在Drupal 7中使用JQuery

Joc*_*ung 33 javascript jquery drupal drupal-7

我正在编写自己的Drupal 7模块,并喜欢在其中使用JQuery.

$('#field').toggle();
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:

TypeError: Property '$' of object [object DOMWindow] is not a function
Run Code Online (Sandbox Code Playgroud)

似乎没有加载JQuery.否则应定义$.

虽然我实际上将它包含在标题中:

<script type="text/javascript" src="http://rockfinder.de/misc/jquery.js?v=1.4.4"></script>
Run Code Online (Sandbox Code Playgroud)

我是否还必须在Drupal中激活JQuery?是否被Drupal覆盖?

那是网站:http://rockfinder.orgapage.de

Eat*_*ton 89

从Drupal 7升级指南:

通过在现有代码周围添加一个小包装器,Javascript应该与jQuery之外的其他库兼容:

(function ($) {
  // Original JavaScript code.
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

$ global将不再引用jquery对象.但是,使用这种结构,局部变量$将引用jquery,允许您的代码通过$访问jQuery,而代码不会与使用$ global的其他库冲突.

您也可以在代码中使用'jQuery'变量而不是$ variable.

  • 我在Javascript中不熟悉这种语法.有人能解释一下这里发生了什么吗? (3认同)
  • 它基本上创建了一个从$到jQuery的别名.如上所述,其原因是包括使用$的其他JS库. (2认同)

And*_*ech 14

根据Firebug,您的jQuery文件正在加载:

替代文字

但是$被其他东西覆盖了:

替代文字


你应该做的是使用$一个函数封装变量的使用,该函数使用jQuery对象作为第一个实际参数来调用自身:

(function ($) {

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

}(jQuery));
Run Code Online (Sandbox Code Playgroud)

  • 这是为了避免与其他Javascript库(如Prototype)发生冲突. (2认同)

小智 8

有可能你的脚本没有这样初始化,你必须使用Drupal.behaviors.YOURTHEMENAME

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

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

}

};
})(jQuery);    
Run Code Online (Sandbox Code Playgroud)

  • 不应该使用`}(jQuery));`而不是`})(jQuery);`在代码的最后一行? (2认同)