Рейтинг:0

Why does my JS file not get loaded?

флаг nl

I am a beginner with Drupal. I want to include a JavaScript file using a custom module.

I created the .libraries.yml file, hello_world.libraries.yml.

hello_world_js:
  js:
    js/basic.js: {}
  dependencies:
    - core/jquery
    - core/drupal
    - core/drupalSettings

The module .info.yml file (hello_worl.info.yml) contains a reference to the library.

name: Hello World
type: module
description: Say Hello World
package: Custom
core: 8.x
libraries:
  - hello_world/hello_world_js

The JavaScript code in the basic.js file is the following one.

(function($,Drupal){
  Drupal.behaviors.addAccessionBehavior = {
    attach: function(context, settings){
      $(".query_button").click(function(){
        console.log("works");
      });
    }
  };
})(JQuery, Drupal);

When I click on a button using the .query_button CSS class, nothing happens and I don't know what the problem is.

leymannx avatar
флаг ne
Вам нужно подключить библиотеку. Сейчас вы только заявили об этом. https://www.drupal.org/docs/drupal-apis/javascript-api/add-javascript-to-your-theme-or-module#s-attaching-the-file
Francisco Javier Valero Moreno avatar
флаг nl
когда я объявил в info.yml, разве он не привязан к сети?
leymannx avatar
флаг ne
В файле информации темы, да. В файле информации о модуле нет. Модули не имеют ключа `библиотеки:`. Вы объявили его в *.libraries.yml и теперь вам нужно его прикрепить. Вы не можете присоединять библиотеки в информационных файлах модуля.
Francisco Javier Valero Moreno avatar
флаг nl
я вижу, я сделал это $build['#attached']['library'][] = 'hello_world/hello_world_js'; как пример, но все еще не работает
leymannx avatar
флаг ne
Где именно вы добавили эту строку кода? [`hello_world_page_attachments`](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21theme.api.php/function/hook_page_attachments/8.3.x) в hello_world.module?
Francisco Javier Valero Moreno avatar
флаг nl
Теперь я добавил в hello_world.module, но теперь у меня другая ошибка с ajax (?ajax_form=1&_wrapper_format=drupal_ajax: ajax.$form.ajaxSubmit не является функцией) и одна кнопка, которой у меня не было раньше, поэтому я предположу, что сейчас загружается, но что-то не так, спасибо :D сейчас попробую найти в чем ошибка
флаг fr
В целом ваш код выглядит нормально. Часто такие проблемы возникают из-за имени или расположения ваших файлов. Вы объявили файл JavaScript как «js/basic.js», что означает, что он должен находиться в подкаталоге с именем «js», поэтому в каталоге модуля верхнего уровня у вас должны быть «hello_world.info.yml» и «hello_world. module» и каталог «js», а в каталоге «js» у вас должен быть «basic.js».
Francisco Javier Valero Moreno avatar
флаг nl
да, я исправил, как ответ ниже, я написал JQuery вместо jQuery, и это дало мне ошибку
Рейтинг:0
флаг de

Если вы посмотрите в консоль JavaScript, вы можете получить больше информации. У вас, вероятно, есть ошибка в вашей консоли, которая говорит JQuery не определен. Это потому, что вы объявили JQuery но переменная jQuery. Итак, это:

})(JQuery, Друпал);

Должно быть так:

})(jQuery, Drupal);

Кроме того, если вы хотите проверить, был ли прикреплен ваш файл, вы должны добавить команду отладки непосредственно в behaviors.attach(), а не подфункцию, которая требует щелчка (как вы сделали). Таким образом, вы можете проверить, был ли добавлен ваш скрипт следующим образом:

Drupal.behaviors.addAccessionBehavior = {
  прикрепить: функция (контекст, настройки) {
    console.log("работает");
    $(".query_button").click(функция(){
      // Делаем что-то по клику
    });
  }
};

Это зарегистрирует что-то при загрузке страницы, что сообщит вам, что скрипт загружен (и содержит необходимые переменные).

Francisco Javier Valero Moreno avatar
флаг nl
Да, на самом деле это было причиной моей ошибки, большое спасибо
Jaypan avatar
флаг de
Тогда, пожалуйста, отметьте мое решение как правильный ответ.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.