我在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)
);
但是,我收到错误消息未捕获的ReferenceError:未定义测试
我想利用jQuery在该函数中的能力,这就是为什么我没有使用普通的JavaScript文件。
答案 0 :(得分:1)
快速而肮脏的答案:您定义testing()
并在其中调用它的范围并不相同。您可以定义测试全局范围,然后它将起作用,尽管这不是大型应用程序的最佳实践。
(function ($) {
window.testing = function(){
alert('TEST function responding!');
}
})(jQuery);
答案 1 :(得分: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)
);
答案 2 :(得分: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)
);