调用的函数,控制台说它是匿名的
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.querySelectorAll
returns跟Array
!
你应该使用
diceDOM[0].style.display = "none";
当然,如果你有更多的 .dice
元素,那么你必须遍历 diceDOM 并逐项设置样式:
diceDOM.forEach((i) => { i.style.display = 'none'; });
我在制作这个双骰子游戏时遇到了问题。我认为问题出在 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.querySelectorAll
returns跟Array
!
你应该使用
diceDOM[0].style.display = "none";
当然,如果你有更多的 .dice
元素,那么你必须遍历 diceDOM 并逐项设置样式:
diceDOM.forEach((i) => { i.style.display = 'none'; });