我面临一个奇怪的问题,通过Javascript附加的JS文件不能正常工作。我无法确定JS文件为什么不能工作,它由几个事件侦听器组成,这些侦听器连接到DOM元素,如下所示:
(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
文件:
global:
css:
theme:
css/main.css: {}
dependencies:
- core/drupal
- core/jquery
- drulma/bulma
- drulma/mainjs
..。
mainjs:
js:
js/main.js: {}
dependencies:
- core/drupal
控制台中没有错误,但我注意到我可以通过在setTimeout中包装函数来使其工作。如果有人有主意我会很感激的?
发布于 2021-01-27 20:47:35
您将在文档上下文中触发事件,该事件只发生一次(基本上与旧式$(document).ready()
相同)。但是,Drupal行为的一个要点是,每次向DOM中添加某些内容时都会触发Drupal行为,甚至在Ajax中添加时也是如此。(core的BigPipe
可以使用Ajax添加块,默认情况下这个模块是启用的)
所以,而不是一枪
Drupal.behaviors.basics = {
attach: function (context, settings) {
if (context !== document) {
return;
}
...do stuff
针对特定的DOM节点,例如,如果您的旋转木马有一个容器,
...
将行为附加到它的类:
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节点上重复触发
https://drupal.stackexchange.com/questions/299778
复制相似问题