首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过Drupal行为附加的Javascript文件有时不起作用

通过Drupal行为附加的Javascript文件有时不起作用
EN

Drupal用户
提问于 2021-01-27 19:17:56
回答 1查看 167关注 0票数 0

我面临一个奇怪的问题,通过Javascript附加的JS文件不能正常工作。我无法确定JS文件为什么不能工作,它由几个事件侦听器组成,这些侦听器连接到DOM元素,如下所示:

代码语言:javascript
运行
复制
(function ($, Drupal) {
  Drupal.behaviors.basics = {
    attach: function (context, settings) {
      if (context !== document) {
        return;
      }

     initPublicationsAccordion($)
     initBackground($)
     initNavbarFix($)
     initMobileNav($)
     initAuthorsDropdown($)
     setTimeout(() => initCarousel($), 500) // this fixes it
    }
  };
})(jQuery, Drupal);

以及相应的*.libraries.yml文件:

代码语言:javascript
运行
复制
global:
  css:
    theme:
      css/main.css: {}
  dependencies:
    - core/drupal
    - core/jquery
    - drulma/bulma
    - drulma/mainjs

..。

代码语言:javascript
运行
复制
mainjs:
  js:
    js/main.js: {}
  dependencies:
    - core/drupal

控制台中没有错误,但我注意到我可以通过在setTimeout中包装函数来使其工作。如果有人有主意我会很感激的?

EN

回答 1

Drupal用户

回答已采纳

发布于 2021-01-27 20:47:35

您将在文档上下文中触发事件,该事件只发生一次(基本上与旧式$(document).ready()相同)。但是,Drupal行为的一个要点是,每次向DOM中添加某些内容时都会触发Drupal行为,甚至在Ajax中添加时也是如此。(core的BigPipe可以使用Ajax添加块,默认情况下这个模块是启用的)

所以,而不是一枪

代码语言:javascript
运行
复制
  Drupal.behaviors.basics = {
    attach: function (context, settings) {
      if (context !== document) {
        return;
      }
      ...do stuff

针对特定的DOM节点,例如,如果您的旋转木马有一个容器,

...

将行为附加到它的类:

代码语言:javascript
运行
复制
  Drupal.behaviors.my_fancy_carousel  {
    attach: function (context, settings) {
      $('.my_fancy_carousel', context).once('init_my_fancy_carousel').each( function() {
        ...do stuff...

还请注意.once('my_unique_identifier')部件,它确保函数不会在同一个DOM节点上重复触发

票数 1
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/299778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档