如何解决Vanilla JS 相当于 jQuery $.once()?
在 Drupal 9 站点上工作并尝试向页面添加一些自定义 JS 代码。
Drupal.behaviors.syfyGlobalHideMenu = {
attach: function (context,settings) {
$('.nav-flyout',context).once('remove-modals',function () {
$(document).keyup(function (e) {
if (e.keyCode == 27) {
$('.nav-flyout',context).removeClass('js-flyout-active');
}
});
});
}
};
想知道是否有与上面的 jQuery .once 功能等效的 vanilla JS? 目前 Drupal 多次附加事件侦听器,我试图避免这种情况,因为我只想附加事件侦听器一次,但每次调用事件时都保持附加并运行。
let intervalID = null;
const search = document.querySelector(".call-us-table input#edit-search");
search.addEventListener("keydown",event => {
form.setAttribute("onsubmit","return false");
clearInterval(intervalID);
});
search.addEventListener("keyup",event => {
intervalID = setInterval(submitForm,2000);
});
解决方法
jquery曾经添加了一个html属性来检查是否是第一次运行。
function vanillaOnce() {
if (!document.body.getAttribute('data-once')) {
document.body.setAttribute('data-once','true');
return true;
} else {
return false;
}
}
if (vanillaOnce) {
console.log('runs only once');
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。