Score:0

Why does my JS file not get loaded?

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 flag
คุณต้องแนบไลบรารี ตอนนี้คุณประกาศเท่านั้น 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
เมื่อฉันประกาศใน info.yml มันไม่ได้เชื่อมโยงกับเว็บทั้งหมดใช่ไหม
leymannx avatar
ne flag
ในไฟล์ข้อมูลธีม ใช่ ในไฟล์ข้อมูลโมดูล ไม่มี โมดูลไม่มีคีย์ `libraries:` คุณประกาศไว้ใน *.libraries.yml และตอนนี้คุณต้องแนบไฟล์นั้น คุณไม่สามารถแนบไลบรารีในไฟล์ข้อมูลโมดูลได้
Francisco Javier Valero Moreno avatar
ฉันเข้าใจแล้ว ฉันได้ทำ $build['#attached']['library'][] = 'hello_world/hello_world_js'; ดังตัวอย่างแต่ยังไม่ได้ผล
leymannx avatar
ne flag
คุณเพิ่มโค้ดบรรทัดนี้ตรงไหนกันแน่? [`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
ฉันเพิ่มไปที่ hello_world.module แล้ว แต่ตอนนี้ฉันมีข้อผิดพลาดอื่นกับ ajax (?ajax_form=1&_wrapper_format=drupal_ajax: ajax.$form.ajaxSubmit ไม่ใช่ฟังก์ชัน) และปุ่มเดียวที่ฉันไม่เคยมีมาก่อน ดังนั้นฉันจะถือว่าดีกว่าตอนนี้ กำลังโหลด แต่มีบางอย่างผิดปกติ ขอบคุณ :D ฉันจะพยายามหาข้อผิดพลาดในขณะนี้
fr flag
โดยทั่วไปรหัสของคุณดูดี หลายครั้งที่ปัญหาเช่นนี้เป็นเพราะชื่อหรือตำแหน่งของไฟล์ของคุณ คุณประกาศไฟล์ JavaScript เป็น 'js/basic.js' ซึ่งหมายความว่าไฟล์ต้องอยู่ในไดเร็กทอรีย่อยชื่อ 'js' ดังนั้นในไดเร็กทอรีโมดูลระดับบนสุด คุณควรมี 'hello_world.info.yml' และ 'hello_world module' และไดเร็กทอรี 'js' ในขณะที่ไดเร็กทอรี 'js' คุณควรมี 'basic.js'
Francisco Javier Valero Moreno avatar
ใช่ ฉันแก้ไขแล้ว เนื่องจากคำตอบด้านล่าง ฉันเขียน JQuery แทน jQuery และนั่นทำให้ฉันเกิดข้อผิดพลาด
Score:0
ธง de

หากคุณดูในคอนโซล JavaScript คุณจะได้รับข้อมูลเพิ่มเติม คุณอาจมีข้อผิดพลาดในคอนโซลของคุณที่ระบุว่า ไม่ได้กำหนด JQuery. นี่เป็นเพราะคุณประกาศ JQuery แต่ตัวแปรคือ jQuery. ดังนั้น:

})(JQuery, Drupal);

ควรเป็น:

})(jQuery, Drupal);

นอกจากนี้ เมื่อคุณต้องการทดสอบว่ามีการแนบไฟล์ของคุณหรือไม่ คุณควรเพิ่มคำสั่งดีบั๊กโดยตรงใน behaviors.attach() แทนที่จะเป็นฟังก์ชันย่อยที่ต้องคลิก (เหมือนที่คุณได้ทำไปแล้ว) ดังนั้นคุณสามารถทดสอบได้ว่าสคริปต์ของคุณถูกเพิ่มดังนี้:

Drupal.behaviors.addAccessionBehavior = {
  แนบ: ฟังก์ชัน (บริบท การตั้งค่า){
    console.log("ทำงาน");
    $(".query_button").คลิก(ฟังก์ชัน(){
      // ทำสิ่งต่าง ๆ เมื่อคลิก
    });
  }
};

สิ่งนี้จะบันทึกบางอย่างในการโหลดหน้าเว็บ ซึ่งจะบอกคุณว่าสคริปต์โหลดแล้ว (และมีตัวแปรที่จำเป็น)

Francisco Javier Valero Moreno avatar
ใช่ อันที่จริงนั่นเป็นสาเหตุของข้อผิดพลาดที่ฉันมี ขอบคุณมาก
Jaypan avatar
de flag
จากนั้นโปรดทำเครื่องหมายคำตอบของฉันว่าเป็นคำตอบที่ถูกต้อง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา