//未知的错误:选择颜色不是函数 - 我找不到错误



一切都很好,直到我调用函数var picked color = pickColor();我已经在控制台中分别运行了pickColor() - 工作正常!!!请帮忙!

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="colorGame.css">
    <title>Color Game</title>
</head>
<body>
    <h1>The <span id= "colorDisplay">Great </span> Colors Game!!!</h1>
    <div id="message"></div>
    <div id="container">
        <div class="squares"></div>
        <div class="squares"></div>
        <div class="squares"></div>
        <div class="squares"></div>
        <div class="squares"></div>
        <div class="squares"></div>
    </div>

    <script src = "colorGame.js"></script>
</body>
</html>

CSS

/*Color Games CSS*/

/*General Styles*/
body {
    margin: 0;
    padding:0;
    background-color: #232323;
}
h1{
    color:white;
}
#container {
    width:600px;
    margin: 0 auto;

}
#message {
    color:white;
}

.squares {
    width: 180px;
    height:190px;
    background-color: purple;
    float:left;
    margin-right: 10px;
    margin-bottom: 10px;
    border-radius: 40px;

}

颜色游戏JavaScript-一切都很好,直到我称函数var picked color = pickColor();我已经在控制台中分别运行了pickColor() - 工作正常!!!请帮忙!

var colors = [
    "rgb(255, 0, 0)",
    "rgb(255, 255, 0)",
    "rgb(0, 255, 0)",
    "rgb(0, 255, 255)",
    "rgb(0, 0, 255)",
    "rgb(255, 0, 255)"
];
// Variables 
var squares = document.querySelectorAll(".squares");
var pickedColor = pickColor(); 

var colorDisplay = document.getElementById("colorDisplay");
var message = document.getElementById("message");

//Display 
colorDisplay.textContent = pickedColor;
//test
for (var i = 0; i < squares.length; i++) {
    squares[i].style.backgroundColor = colors[i];

    squares[i].addEventListener("click",function(){
        var clickedColor = this.style.backgroundColor;

        if (clickedColor === pickedColor){
            message.textContent = "Right Color";
            changeColors(clickedColor); 

        } else {
            this.style.backgroundColor = "#232323";
            message.textContent = "Try Again";
        }
    });
    function changeColors(color){
        for (i = 0; i < squares.length;  i++){
            squares[i].style.backgroundColor =  color; //
        }
    }
    function pickColor(){
        var random = Math.floor(Math.random() * colors.length );
        return colors[random];
    }

}

在for循环外定义pickColorchangeColor功能。如果它们在循环中定义,则它们是无法访问的。

function changeColors(color) {
  for (i = 0; i < squares.length; i++) {
    squares[i].style.backgroundColor = color; //
  }
}
function pickColor() {
  var random = Math.floor(Math.random() * colors.length);
  return colors[random];
}
var colors = [
  "rgb(255, 0, 0)",
  "rgb(255, 255, 0)",
  "rgb(0, 255, 0)",
  "rgb(0, 255, 255)",
  "rgb(0, 0, 255)",
  "rgb(255, 0, 255)"
];
// Variables 
var squares = document.querySelectorAll(".squares");
var pickedColor = pickColor()
var colorDisplay = document.getElementById("colorDisplay");
var message = document.getElementById("message");
//Display 
colorDisplay.textContent = pickedColor;
//test
for (var i = 0; i < squares.length; i++) {
 squares[i].style.backgroundColor = colors[i];
squares[i].addEventListener("click", function() {
    var clickedColor = this.style.backgroundColor;
    if (clickedColor === pickedColor) {
      message.textContent = "Right Color";
      changeColors(clickedColor);
    } else {
      this.style.backgroundColor = "#232323";
      message.textContent = "Try Again";
    }
  });
}
body {
  margin: 0;
  padding: 0;
  background-color: #232323;
}
h1 {
  color: white;
}
#container {
  width: 600px;
  margin: 0 auto;
}
#message {
  color: white;
}
.squares {
  width: 180px;
  height: 190px;
  background-color: purple;
  float: left;
  margin-right: 10px;
  margin-bottom: 10px;
  border-radius: 40px;
}
C
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="colorGame.css">
  <title>Color Game</title>
</head>
<body>
  <h1>The <span id="colorDisplay">Great </span> Colors Game!!!</h1>
  <div id="message"></div>
  <div id="container">
    <div class="squares"></div>
    <div class="squares"></div>
    <div class="squares"></div>
    <div class="squares"></div>
    <div class="squares"></div>
    <div class="squares"></div>
  </div>
</body>
</html>

这是一个范围问题。您在for循环中定义函数pickColor,因此仅在此循环中定义和可用。

要解决此问题,只需将函数的定义移至此循环中,以便您的var pickedColor = pickColor();行可以使用它。

另外,您可能希望OTO为changeColors()功能做同样的事情。这样的东西:

var colors = [
    "rgb(255, 0, 0)",
    "rgb(255, 255, 0)",
    "rgb(0, 255, 0)",
    "rgb(0, 255, 255)",
    "rgb(0, 0, 255)",
    "rgb(255, 0, 255)"
];
// Variables 
var squares = document.querySelectorAll(".squares");
var pickedColor = pickColor(); 

var colorDisplay = document.getElementById("colorDisplay");
var message = document.getElementById("message");

//Display 
colorDisplay.textContent = pickedColor;
//test
for (var i = 0; i < squares.length; i++) {
    squares[i].style.backgroundColor = colors[i];

    squares[i].addEventListener("click",function(){
        var clickedColor = this.style.backgroundColor;

        if (clickedColor === pickedColor){
            message.textContent = "Right Color";
            changeColors(clickedColor); 

        } else {
            this.style.backgroundColor = "#232323";
            message.textContent = "Try Again";
        }
    });
}
function changeColors(color){
        for (i = 0; i < squares.length;  i++){
            squares[i].style.backgroundColor =  color; //
        }
    }
function pickColor(){
    var random = Math.floor(Math.random() * colors.length );
    return colors[random];
}

,正如我到目前为止所理解的,以下原因是问题请参见评论

var pickedColor = pickColor(); //Global, we're calling here
for (....) {
//codes
function pickColor(){  //Local
    var random = Math.floor(Math.random() * colors.length );
    return colors[random];
}

}

但是,这是可能的:funct changeColor()可以像本地函数一样保留在循环中,并在本地称为。

function pickColor() {
  var random = Math.floor(Math.random() * colors.length);
  return colors[random];
}  
var colors = [
      "rgb(255, 0, 0)",
      "rgb(255, 255, 0)",
      "rgb(0, 255, 0)",
      "rgb(0, 255, 255)",
      "rgb(0, 0, 255)",
      "rgb(255, 0, 255)"
    ];
    // Variables 
    var squares = document.querySelectorAll(".squares");
    var pickedColor = pickColor()
    var colorDisplay = document.getElementById("colorDisplay");
    var message = document.getElementById("message");
    //Display 
    colorDisplay.textContent = pickedColor;
    //test
    for (var i = 0; i < squares.length; i++) {
     squares[i].style.backgroundColor = colors[i];
    squares[i].addEventListener("click", function() {
        var clickedColor = this.style.backgroundColor;
        if (clickedColor === pickedColor) {
          message.textContent = "Right Color";
          changeColors(clickedColor);
        } else {
          this.style.backgroundColor = "#232323";
          message.textContent = "Try Again";
        }
      });
function changeColors(color) {
  for (i = 0; i < squares.length; i++) {
    squares[i].style.backgroundColor = color; //
  }
}
    }

相关内容

最新更新