从 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 代码位于其自己的文件中,请这样做(取自示例)

查看 documentation

中的示例

有关将 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);"),

    ),
);