// Uncaught Error: Pick color не является функцией - я не могу найти ошибку - PullRequest
0 голосов
/ 20 февраля 2019

Все было хорошо, пока я не вызвал функцию var pick 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 pick 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];
    }


}

Ответы [ 3 ]

0 голосов
/ 20 февраля 2019

Определите функции pickColor и changeColor вне цикла for.Они недоступны извне, если они определены в цикле.

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>
0 голосов
/ 20 февраля 2019

Как я понял до сих пор, следующая причина вопроса, пожалуйста, см. Комментарий

var pickedColor = pickColor(); //Global, we're calling here

for (....) {
//codes

function pickColor(){  //Local

    var random = Math.floor(Math.random() * colors.length );

    return colors[random];
}


}

Но, тем не менее, это возможно: функция 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; //
  }
}
    }
0 голосов
/ 20 февраля 2019

Это проблема объема.Вы определяете свою функцию pickColor внутри цикла for, поэтому она будет определяться и использоваться только внутри этого цикла.

Чтобы это исправить, просто переместите определение функции из этого цикла, чтобываша строка var pickedColor = pickColor(); может использовать ее.

Кроме того, вы можете захотеть сделать то же самое для вашей функции 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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...