调用的函数,控制台说它是匿名的

Function called, console says it is anonymous

我在制作这个双骰子游戏时遇到了问题。我认为问题出在 diceDOM 变量上,我在控制台中收到一条错误消息说 "Cannot set property 'display' of undefined at init" 并且在控制台中它说 init();调用未定义。

我想在该变量中保存的两个骰子具有相同的 class .dice。是因为我应该将它们单独保存在一个数组中吗?

代码在下面,我省略了中间的代码:

 var scores, roundScore, activePlayer, dice1, dice2, diceDOM, gamePlaying;

// var userInput = Number(document.getElementById("userScore").value);
diceDOM = document.querySelectorAll(".dice");
init();

function init() {
    roundScore = 0;
    scores = [0, 0];
    activePlayer = 0;
    diceDOM.style.display = "none";
    document.getElementById("score-0").textContent = 0;
    document.getElementById("score-1").textContent = 0;
    document.getElementById("current-0").textContent = 0;
    document.getElementById("current-1").textContent = 0;
    document.querySelector(".player-0-panel").classList.remove("active");
    document.querySelector(".player-0-panel").classList.add("active");
    document.querySelector(".player-1-panel").classList.remove("active");
    document.querySelector(".player-0-panel").classList.remove("winner");
    document.querySelector(".player-1-panel").classList.remove("winner");
    document.getElementById("name-0").textContent = "Player 1";
    document.getElementById("name-1").textContent = "Player 2";
    document.getElementById("userScore").value = "";
    gamePlaying = true;
};

提前致谢!

diceDOM 是一个节点列表,这意味着它是元素的集合并且没有样式 属性,您必须遍历每个 diceDOM 元素并将其显示设置为 none ,所以代替:

diceDOM.style.display = "none";

做:

diceDOM.forEach(function(dice) {
    dice.style.display = "none";
})

当您使用 querySelectorAll 时,它 returns NodeList 对象中匹配的所有元素。如果你只想要第一个 div 和 class dice,你可以

diceDOM = document.querySelector(".dice");

否则您将不得不访问每个元素 ->

diceDOM[index].style.display = "none";

document.querySelectorAllreturns跟Array

你应该使用

diceDOM[0].style.display = "none";

当然,如果你有更多的 .dice 元素,那么你必须遍历 diceDOM 并逐项设置样式:

diceDOM.forEach((i) => { i.style.display = 'none'; });