javascript - 单击事件返回未定义,但是当我在窗口上运行加载事件时,该函数起作用

标签 javascript arrays undefined

我想简单地将数组中的一个词放入 DOM。单击该按钮时,它返回未定义,如果我 console.log randIndex 我得到 NaN

好的,所以我已经尝试解决这个问题,但我想我遗漏了一些东西。当我点击 mealBtn 时,它应该运行一个函数来在按钮上方显示一个餐点。但是,它返回 undefined 并将 undefined 放入 DOM 中。最让我感到困惑的是,如果我在 window.load 上运行一个初始化函数,它就会完全按照预期的方式运行。

    //load an item from menu on window load
    window.addEventListener('load', init);

    const mealBtn = document.getElementById('mealBtn');
    const currentMeal = document.getElementById('current-meal');
    const message = document.getElementById('message');

    const menu = [
      'Macaroni',
      'Burgers',
      'Chili',
      'Breakfast',
      'Chicken',
      'Take Out?'
    ];

    function init(){
      showMeal(menu);
    }

    mealBtn.addEventListener('click', showMeal);

    //show a meal from menu array
    function showMeal(menu){
      const randIndex = Math.floor(Math.random() * menu.length);
      currentMeal.innerHTML = menu[randIndex];
      message.innerHTML = 'How about this?';
      message.style.color = '#003b6f'
    };

我希望当我单击按钮时,它应该在按钮正上方的 DOM 中提供菜单建议。它在加载窗口时对 init 函数起作用,而不是在单击按钮时起作用。

最佳答案

mealBtn.addEventListener('click', showMeal);

触发时传递给 showMeal 的参数是事件,而不是 menu

你想要一个

mealBtn.addEventListener('click', () => showMeal(menu));
// or
mealBtn.addEventListener('click', showMeal.bind(null, menu));

第二个是部分应用的例子……它很简洁但不能立即阅读。

关于javascript - 单击事件返回未定义,但是当我在窗口上运行加载事件时,该函数起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56567103/

相关文章:

javascript - 如何在 JavaScript 中获取 html 实体的数字、十六进制和 ISO

javascript - 我的 jquery 和 css 粘滞栏不起作用

javascript - 属性未显示在 json 中,重构 json 对象

c++ - 无论如何我可以计算这个数组中元素的数量?

ios - 如何从具有多个条件的数组中删除重复项?

javascript - jquery javascript 停止在嵌套数组迭代中计算 undefined object

undefined - IDL 中未定义 READFITS

javascript - angular 1.3找不到 Controller 功能

java - 如何在 Java 中创建一个固定大小的泛型数组?

javascript - foreach 循环和返回值 undefined