javascript - 如何对每个单独的对象键值对使用 addEventListener?

标签 javascript addeventlistener

我有一个这样的 JavaScript 对象 -

var pages = {
    about: document.querySelector('#about'),
    meta: document.querySelector('#meta'),
    foresight: document.querySelector('#foresight')
}

querySelector 是我的导航栏中的一个 ID,下面的代码中列出了 HREF id(它在页面上链接到的位置)-

我正在尝试添加一个事件监听器,它会触发一个 smoothscroll 方法以转到我页面的某些区域,我让它像这样工作 -

pages.about.addEventListener('click', function(event){
    event.preventDefault();
    smoothScroll(document.querySelector('#page1'));
});

pages.meta.addEventListener('click', function(event){
    event.preventDefault();
    smoothScroll(document.querySelector('#page2'));
});

pages.foresight.addEventListener('click', function(event){
    event.preventDefault();
    smoothScroll(document.querySelector('#page3'));
});

我知道这不是最有效的写法,并且尝试了一个对象 forEach 方法,在键上使用 If 条件来平滑滚动到相应的页面,但它似乎无法正常工作。谁能告诉我写这篇文章的最佳实践方式?

谢谢

最佳答案

您可以将页面 ID 信息组合到您的数据结构中,并使用循环来重用代码:

const pages = [
    { button: "about",     page: "page1" },
    { button: "meta",      page: "page2" },
    { button: "foresight", page: "page3" } 
];

for (const { button, page } of pages) {
    document.getElementById(button).addEventListener('click', function(event){
        event.preventDefault();
        smoothScroll(document.getElementById(page));
    });
}

关于javascript - 如何对每个单独的对象键值对使用 addEventListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47104660/

相关文章:

javascript - 在 cujojs rest.js 上中止 Xhr

javascript - IdentityServer3 和 Javascript 的隐式流程 - 如何处理 client_secret

javascript - 如何调试使用 Testacular (Karma) 运行的 Jasmine 规范?

javascript - 将EventListener 添加到innerHTML

javascript - 使用事件监听器向上冒泡或向下传播时,为什么我看不到多个 console.log() 操作?

javascript - 如何在纯 Javascript 中的单选按钮上使用 addEventListener?

javascript - jquery 文本输入搞笑

javascript - 表单提交处理程序未被调用

javascript - Toggle 带有下拉列表的日期选择器的数量

javascript - addEventListener 只是运行该函数,而不是保存该函数