0

我在 Drupal 中遇到了以下问题,但这可能不完全是 Drupal 特定的问题。

我有以下简单的javascript:

(function ($) {

  function testing(){
    alert('TEST function responding!');
  }

})(jQuery);

我正在尝试使用以下代码从我的 Drupal 模块调用该函数:

drupal_add_js('jQuery(document).ready(function () { testing(); });',
  array('type' => 'inline', 'scope' => 'footer', 'weight' => 5)
);

但是,我收到一条错误消息,提示 Uncaught ReferenceError: testing is not defined

我想在该函数中利用 jQuery 的能力,这就是我不使用普通 JavaScript 文件的原因。

4

3 回答 3

1

快速而肮脏的答案:您定义的范围testing()和调用它的范围不同。您可以定义测试全局范围,然后它将起作用,尽管这不是大型应用程序的最佳实践。

(function ($) {
    window.testing = function(){
        alert('TEST function responding!');
    }
})(jQuery);
于 2012-10-17T14:37:00.453 回答
0

如果你想将你的函数扩展到 jQuery 变量,你可以这样做:

if( !jQuery.testing ){

jQuery.extend( {
    testing: function() { 
        console.log("Calling from extend function in jQuery");
    }
});
}

并称之为:

drupal_add_js('jQuery(document).ready(function () { jQuery.testing(); });',
  array('type' => 'inline', 'scope' => 'footer', 'weight' => 5)
);
于 2012-10-17T14:42:06.580 回答
0

您是否将代码的第一部分存储在外部 JavaScript 中?使用 drupal_add_js 来引用它,例如,

drupal_add_js('js/external.js');

//external.js
jQuery.noConflict();
jQuery(document).ready(function($) {
window.testing = function(){
    alert('TEST function responding!');
// The useful part of this is the ability to use $ from now on. e.g., $('body').hide();
}
});
});

然后添加你的 JavaScript

drupal_add_js('jQuery(document).ready(function () { testing(); });',
array('type' => 'inline', 'scope' => 'footer', 'weight' => 5)
);
于 2012-10-17T14:56:17.423 回答