自定义模块:未捕获类型错误:未定义不是函数

Posted

技术标签:

【中文标题】自定义模块:未捕获类型错误:未定义不是函数【英文标题】:Custom module: Uncaught TypeError: undefined is not a function 【发布时间】:2015-02-25 03:25:33 【问题描述】:

我正在尝试编写自己的 Drupal 模块,并且我想要包含 javascript。我尝试包含一个非常简单的 jquery 文件,但我不断收到 Uncaught 'TypeError: undefined is not a function'。 我已经更新了 Drupal 的 jQuery 版本。

作为参考,这些是我正在使用的脚本。

我的 .info 文件

name = Test
description = A slideshow that implements the PgwSlider Javascript.
core = 7.x

我的 .module 文件

 /**
 * Implements hook_help().
 *
 * Displays help and module information.
 *
 * @param path 
 *   Which path of the site we're using to display help
 * @param arg 
 *   Array that holds the current path as returned from arg() function
 */
function test_help($path, $arg) 
  switch ($path) 
    case "admin/help#pgwslider":
      return '<p>' . t("Displays a slideshow") . '</p>';
      break;
  


function test_init() 
    drupal_add_css(drupal_get_path('module', 'test') .'/styles.css');
    drupal_add_js(drupal_get_path('module', 'test') .'/test.js');

我的 .js 文件

$(document).ready(function() 
    $('p').click(function()
        $(this).hide();
    );
    console.log('test')
);

有什么想法吗?

第二个小问题:

这是包含 js 文件的最佳方式吗?我知道在主题中这是在 .info 文件中完成的,但是对于模块,我没有找到全面的答案。

谢谢大家!

【问题讨论】:

【参考方案1】:

假设你的.js文件的路径是正确的,你必须阅读一些standards of JavaScript code:

你所有的 JS 代码必须像下面这样声明:

/**
 * @file
*/
(function ($) 
  "use strict";

  // Your js code

)(jQuery);

你添加JS的方式已经足够好了,但我建议你使用hook_library()。

【讨论】:

或者使用jQuery 代替$ 符号。 jQuery(this).hide(); 应该可以正常工作。 我确定我的路径是正确的,因为在检查资源时我可以看到加载的 test.js 文件。这就是我现在所拥有的,但我仍然遇到同样的错误。我已经阅读了 Drupal 文档,但是唉。 /** * @file */ (function () "use strict"; $(document).ready(function () $('p').click(function () $(this).hide(); ); console.log('test'); ); )(jQuery); 编辑:Pastebin 用于清洁代码 pastebin.com/Gczd0m3T 没关系,让它工作。我从 drupal 文档中复制了代码,该文档在封闭函数的参数中没有 $ 符号。谢谢!

以上是关于自定义模块:未捕获类型错误:未定义不是函数的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误:未定义不是日期选择器引导程序的函数

Bourbon Refills Navigation JavaScript 错误:未捕获类型错误:未定义不是函数

未捕获的类型错误:未定义不是简单脚本上的函数

Backbone.js 视图是不是需要 jQuery 或 Zepto? (或者:为啥我会收到“未捕获的类型错误:未定义不是函数”?)

“未捕获的类型错误:未定义不是函数”- 初学者 Backbone.js 应用程序

Javascript:将画布另存为图像 ==>“未捕获的类型错误:未定义不是函数”