我需要帮助弄清楚为什么这个'if'声明不起作用

时间:2016-05-03 19:49:43

标签: javascript html css

我正在尝试使用HTML,CSS和JavaScript(学习)制作一个简单的rgb游戏。

我想要发生的是当你点击一种颜色时,它显示“正确”或“错误”,静态值colors[3]是正确的。我测试了多个东西,我认为它与数字与字符串或相关有关,但我不知道。当你点击颜色时,它们都是警告“错误”而不是当你点击正确的颜色时,在这种情况下颜色[3](青色),它应该显示“正确”。

感谢。

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)"
]

var squares = document.querySelectorAll(".square");
var pickedColor = colors[3];
console.log(pickedColor);
var colorDisplay = document.querySelector("#colorDisplay");

colorDisplay.textContent = pickedColor;

for (var i = 0; i < squares.length; i++){
    squares[i].style.background = colors[i];

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

      if(clickedColor === pickedColor){
        alert("correct");
      } else {
        alert("wrong");
      }
    });
}
body {
    background-color: #232323;
}
.square {
    width: 30%;
    background: purple;
    padding-bottom: 30%;
    float: left;
    margin: 1.66%;
}
#container {
    margin: 0 auto;
    max-width: 600px;
}
h1 {
    color: white;
}
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Color Game</title>
    <link rel="stylesheet" href="colorGame.css">
</head>

<body>
    <h1>The Great <span id="colorDisplay">RGB</span> Color Game</h1>
    <div id="container">

        <div class="square"></div>
        <div class="square"></div>
        <div class="square"></div>
        <div class="square"></div>
        <div class="square"></div>
        <div class="square"></div>

    </div>
    <script type="text/javascript" src="colorGame.js"></script>
</body>

</html>

5 个答案:

答案 0 :(得分:1)

据我所知,这只是值字符串格式化的问题。 pickedColor在rgb值之间有空格。

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)"
]

答案 1 :(得分:1)

你正在比较2个字符串,其中clickedColor有空格而pickColor不。或者在pickedColor中添加空格或删除clickedColor中的空格,如:

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)"
]

var squares = document.querySelectorAll(".square");
var pickedColor = colors[3];
console.log(pickedColor);
var colorDisplay = document.querySelector("#colorDisplay");

colorDisplay.textContent = pickedColor;

for (var i = 0; i < squares.length; i++){
    squares[i].style.background = colors[i];

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

      if(clickedColor.replace(/ /g,'') === pickedColor){
        alert("correct");
      } else {
        alert("wrong");
      }
    });
}

答案 2 :(得分:1)

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)"
]

使用它,你会很高兴。输出中有额外的空格来自this.background.style。

答案 3 :(得分:1)

由于您的比较方式,此游戏无法正常运行。浏览器有许多怪癖,其中之一就是它们如何解释属性。

例如,您可以假设这两个属性相同:
current_dates_challenged
this.style.background

但是,根据浏览器的不同,你可能是错的或正确的。 IE尤其是不一致的,并且经常更改为this.style.background-color根本不会影响this.style.background,因此设置background-color并不意味着background:red;是红色的。这并不意味着background-color等于background-colorrgb(255,0,0)red。它非常不可预测。

为了让这个游戏有效,你需要做一些叫做规范化的事情。这意味着您将编写一个能够处理#ff0000red#ff0000#f00rgba(255,0,0)rgba(255,0,0,1)的函数并将其转换为一个函数然后可以正确比较的特定格式。

答案 4 :(得分:0)

你需要在颜色的数组中使用逗号后写空格!!

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)"]