在 Drupal 7 中使用 JQuery

Posted

技术标签:

【中文标题】在 Drupal 7 中使用 JQuery【英文标题】:Using JQuery in Drupal 7 【发布时间】:2011-06-08 13:18:04 【问题描述】:

我正在编写自己的 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>

在 Drupal 中激活 JQuery 是否需要做其他事情? $ 是否被 Drupal 覆盖?

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

【问题讨论】:

【参考方案1】:

您可以为 js 创建单独的文件,然后使用以下命令添加 js 文件:

drupal_add_js('path', 'module_name');

【讨论】:

【参考方案2】:

“$ 不是函数”是您在使用 jQuery 时可能遇到的一个非常常见的错误。您可以尝试以下给出的任何答案:

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

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

基本上这将允许我们的代码运行并使用 JQuery 的 $ 快捷方式。

【讨论】:

【参考方案3】:

您的脚本可能没有以这种方式初始化,您必须使用 Drupal.behaviors.YOURTHEMENAME

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

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



;
)(jQuery);    

【讨论】:

您不应该在代码的最后一行使用(jQuery)); 而不是)(jQuery); 吗? 你绝对的传奇,就是这样!大家听着,这就是你在 Drupal 中的做法!!!!【参考方案4】:

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

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


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

(function ($) 

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

(jQuery));

【讨论】:

那么.. 为什么 $ 没有定义?是否被覆盖? 是为了避免与Prototype等其他Javascript库发生冲突。【参考方案5】:

From the Drupal 7 upgrade guide:

应该使Javascript兼容 与 jQuery 以外的其他库 在你的周围添加一个小包装 现有代码:

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

$ 全局将不再指代 jquery 对象。然而,有了这个 构造,局部变量 $ 将引用 jquery,允许您的 通过 $ 访问 jQuery 的代码 无论如何,虽然代码不会 与使用的其他库冲突 $全局。

您也可以在代码中只使用“jQuery”变量而不是 $ 变量。

【讨论】:

谢谢!这正是我一直在寻找但找不到的东西! 我不熟悉 Javascript 中的这种语法。有人能解释一下这里发生了什么吗? 它基本上创建了一个从 $ 到 jQuery 的别名。如上所述,这样做的原因是包含其他使用 $ 的 JS 库。 由于某种原因,这给了我一个很长的错误消息,但是当我用 jQuery 替换 $ 时它工作得很好。 @Jim 代码被包装到一个带有参数 $ 的函数中。然后用 jQuery 调用它,它通过将 $ 的所有实例替换为 jQuery 来执行该函数。这是解决“$ 不是函数”问题的三种方法之一(请参阅tshikatshikaaa.blogspot.com/2012/05/…)

以上是关于在 Drupal 7 中使用 JQuery的主要内容,如果未能解决你的问题,请参考以下文章

在Drupal 7中使用JQuery

在 Drupal 7 中使用表单

带有 ubercart 的 drupal 6 或 7

Drupal 7 视图 $title 变量

Drupal 7 本地安装失败

php 在Drupal 7模板中为不同语言使用不同的菜单