我试图将数组中的一个单词简单地放入DOM中。单击该按钮时,它返回未定义的值,如果我用console.log randIndex,则得到NaN
。
好的,所以我试图弄清楚这一点,但我认为我缺少一些东西。当我单击meetBtn时,它应该运行一个功能以在按钮上方显示一个餐食。但是,它返回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函数上起作用。
答案 0 :(得分:1)
mealBtn.addEventListener('click', showMeal);
触发该事件时传递给showMeal
的参数是事件,而不是menu
您想要
mealBtn.addEventListener('click', () => showMeal(menu));
// or
mealBtn.addEventListener('click', showMeal.bind(null, menu));
第二个例子是部分应用程序的例子……它很简洁,但并不立即可读。
答案 1 :(得分:0)