【问题标题】:Drupal 8 - I cannot call a function in another JavaScript fileDrupal 8 - 我无法调用另一个 JavaScript 文件中的函数
【发布时间】:2021-09-21 21:37:31
【问题描述】:

我的自定义主题上有两个 JavaScript 文件。一个文件具有需要在另一个文件上使用的功能。我下面的东西不起作用。这是我得到的错误。

Uncaught ReferenceError: test is not defined.

jQuery 将用于这两个文件。

file1.js

/**
 * @file
 * UI behaviors
 */

(function ($, Drupal) {

 'use strict';

  $(document).ready(function () {
    function test(){
     console.log('hello'):
    }
  });

})(jQuery, Drupal);

file2.js

/**
 * @file
 * UI behaviors
 */

(function ($, Drupal) {

  'use strict';

  $(document).ready(function () {
     test();
  });

})(jQuery, Drupal);

customtheme.libraries.yml

scripts:
  js:
    js/file1.js: {}
    js/file2.js: {}

customtheme.info.yml

libraries:
 - 'customtheme/scripts'

【问题讨论】:

    标签: javascript drupal


    【解决方案1】:

    您的测试函数不在全局范围内。
    如果您希望能够从任何地方调用您的测试函数,不要将它放在 $(document).ready 或 IIFE 中。
    IE。在第一个文件中,只需..

    function test(){
      console.log('hello);
    }
    

    您可能还想命名您的函数,但我想这是一个单独的问题。

    此外,对于 Drupal,您可能希望使用 drupal.behaviors 而不是 $(document).ready(用于第二个文件)

    【讨论】:

    • 感谢您检查这一点,但是如果我摆脱了两个外部函数((function ($, Drupal) {and$(document).ready(function () {),我将如何在第一个文件中使用 jQuery?
    • 在 file1 中,您将“jQuery”发送到 IIFE 并将其重命名为“$”。在我的上述答案中,您应该只能使用“jQuery”而不是“$”。确保它是您的库的依赖项,但要确保它已加载。但就个人而言,除非真的必要,否则我不会使用 jQuery。
    • 我建议你看一些 javascript 教程来尝试理解 javascript 变量范围和 IIFE
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2022-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2016-09-07
    相关资源
    最近更新 更多