从 Drupal 模块调用 JavaScript 函数?
Call JavaScript function from Drupal module?
我是 Drupal 主题,我正在努力按照我需要的方式修改模块。当发生某些事情时,我需要 运行 一个非常简单的 JavaScript。我发现模块的一部分是负责任的,并且有以下工作:
if (something = something else) {
return array(
'#commands' => array(
// Hacky by works
ajax_command_append('body',
'<script>
alert("Custom Js");
</script>'),
),
);
}
else {
// Do something else
}
然而,最好调用位于其他地方的函数,因为其他模块会想要调用它。我怎样才能从这个语句中调用另一个模块的函数?
你可以像这样在线完成
编辑
在我的第一个回答中,我忘记将 javascript 包装在 jQuery(document).ready(function() {})
中
模块
if (something = something else) {
// Inline fixed
drupal_add_js("jQuery(document).ready(function() { alert('Script inline!'); });", "type" => "inline");
// From file
drupal_add_js("myscript.js", "file");
return array(
'#commands' => array(
),
);
}
else {
// Do something else
}
myscript.js
(function() {
alert('Script from file!');
});
// or with jQuery
(function($) {
// Do something with $
})(jQuery);
如果您希望 javascript 代码位于其自己的文件中,请这样做(取自示例)
中的示例
有关将 javascript 添加到您的 modules/themes
的更多信息
Adding Javascript to your theme or module
Managing JavaScript in Drupal 7
编辑 2
您可以从模块中调用 javascript 函数。我会这样做:
- 创建一个只注入 javascript 代码的新模块。此模块的权重应小于任何其他模块,因此它会在任何其他模块之前执行。
- 然后使用
Drupal.settings
从任何模块调用它。
假设您创建了模块,您应该将 javascript 函数保存到 Drupal.settings
(function ($) {
Drupal.settings.exampleModule = {
myFunction : function () {
alert('My example function!');
}
};
}(jQuery));
这会将代码注入 settings
并且可供任何需要访问它的模块使用。
你的模块
if (something = something else) {
// Inline fixed
drupal_add_js("(function($) { Drupal.settings.exampleModule.myFunction(); })(jQuery);", "type" => "inline");
}
else {
// Do something else
}
我就是这样做的。现在,如果你需要使用 ajax 框架,你应该这样做(试试吧,我以前从未使用过这个框架,所以我猜)
return array(
'#commands' => array(
// Hacky by works
ajax_command_append('body', "(function($) { Drupal.settings.exampleModule.myFunction(); })(jQuery);"),
),
);
我是 Drupal 主题,我正在努力按照我需要的方式修改模块。当发生某些事情时,我需要 运行 一个非常简单的 JavaScript。我发现模块的一部分是负责任的,并且有以下工作:
if (something = something else) {
return array(
'#commands' => array(
// Hacky by works
ajax_command_append('body',
'<script>
alert("Custom Js");
</script>'),
),
);
}
else {
// Do something else
}
然而,最好调用位于其他地方的函数,因为其他模块会想要调用它。我怎样才能从这个语句中调用另一个模块的函数?
你可以像这样在线完成
编辑
在我的第一个回答中,我忘记将 javascript 包装在 jQuery(document).ready(function() {})
模块
if (something = something else) {
// Inline fixed
drupal_add_js("jQuery(document).ready(function() { alert('Script inline!'); });", "type" => "inline");
// From file
drupal_add_js("myscript.js", "file");
return array(
'#commands' => array(
),
);
}
else {
// Do something else
}
myscript.js
(function() {
alert('Script from file!');
});
// or with jQuery
(function($) {
// Do something with $
})(jQuery);
如果您希望 javascript 代码位于其自己的文件中,请这样做(取自示例)
中的示例有关将 javascript 添加到您的 modules/themes
的更多信息Adding Javascript to your theme or module
Managing JavaScript in Drupal 7
编辑 2
您可以从模块中调用 javascript 函数。我会这样做:
- 创建一个只注入 javascript 代码的新模块。此模块的权重应小于任何其他模块,因此它会在任何其他模块之前执行。
- 然后使用
Drupal.settings
从任何模块调用它。
假设您创建了模块,您应该将 javascript 函数保存到 Drupal.settings
(function ($) {
Drupal.settings.exampleModule = {
myFunction : function () {
alert('My example function!');
}
};
}(jQuery));
这会将代码注入 settings
并且可供任何需要访问它的模块使用。
你的模块
if (something = something else) {
// Inline fixed
drupal_add_js("(function($) { Drupal.settings.exampleModule.myFunction(); })(jQuery);", "type" => "inline");
}
else {
// Do something else
}
我就是这样做的。现在,如果你需要使用 ajax 框架,你应该这样做(试试吧,我以前从未使用过这个框架,所以我猜)
return array(
'#commands' => array(
// Hacky by works
ajax_command_append('body', "(function($) { Drupal.settings.exampleModule.myFunction(); })(jQuery);"),
),
);