2017-10-20 4 views
1

J'essaie d'exécuter ce code et tout semble fonctionner sauf l'instruction if. Même s'il existe une correspondance mais qu'elle n'affiche toujours pas la bonne réponse comme indiqué dans le code, elle affiche le code dans l'instruction else.Instruction "si" brisée dans le code JavaScript ...

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]; 
 
var colorDisplay = document.querySelector("#colorDisplay"); 
 

 
colorDisplay.textContent = pickedColor; 
 

 

 
for (var i = 0; i < colors.length; i++) { 
 
    //add initial colors to squares 
 
    squares[i].style.background = colors[i]; 
 
    //add event listener 
 
    squares[i].addEventListener("click", function() { 
 
    //get color of picked square 
 
    var clickedColor = this.style.background; 
 
    //compare to the pickedColor 
 
    console.log(clickedColor); 
 
    if (clickedColor === pickedColor) { 
 
     alert("COORREECCTT"); 
 
    } else { 
 
     alert("WRROONGG!!"); 
 
    } 
 
    }); 
 
}
body { 
 
    background-color: #232323; 
 
} 
 

 
.square { 
 
    width: 30%; 
 
    background-color: purple; 
 
    padding-bottom: 30%; 
 
    float: left; 
 
    margin: 1.66%; 
 
} 
 

 
#container { 
 
    max-width: 600px; 
 
    margin: 0 auto; 
 
} 
 

 
h1 { 
 
    color: #fff; 
 
}
<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> 
 
</body>

+0

C'est pourquoi c'est généralement une mauvaise idée de mélanger la présentation et les données. Une meilleure approche consisterait à attacher le gestionnaire de clics uniquement à la div correcte et pas tous. – JJJ

+2

Comme la réponse ci-dessous suggère que vous faisiez '' rgb (0, 255, 255) '===' rgb (0,255,255) ''. Cela aurait pu être une simple capture si vous aviez inclus 'selectedColor' sur le côté' clickedColor' console.log – nilobarp

Répondre

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]; 
 
var colorDisplay = document.querySelector("#colorDisplay"); 
 

 
colorDisplay.textContent = pickedColor; 
 

 

 
for (var i = 0; i < colors.length; i++) { 
 
    //add initial colors to squares 
 
    squares[i].style.background = colors[i]; 
 
    //add event listener 
 
    squares[i].addEventListener("click", function() { 
 
    //get color of picked square 
 
    var clickedColor = this.style.background; 
 
    //compare to the pickedColor 
 
    console.log(clickedColor); 
 
    if (clickedColor === pickedColor) { 
 
     alert("COORREECCTT"); 
 
    } else { 
 
     alert("WRROONGG!!"); 
 
    } 
 
    }); 
 
}
body { 
 
    background-color: #232323; 
 
} 
 

 
.square { 
 
    width: 30%; 
 
    background-color: purple; 
 
    padding-bottom: 30%; 
 
    float: left; 
 
    margin: 1.66%; 
 
} 
 

 
#container { 
 
    max-width: 600px; 
 
    margin: 0 auto; 
 
} 
 

 
h1 { 
 
    color: #fff; 
 
}
<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> 
 
</body>

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

Je viens d'ajouter en blanc ..

+0

où avez-vous ajouté le blanc? @Young Kyun Jin – Zack

+0

@Zack Votre frappe => 'rgb (255,0,0);' Mon typage => 'rgb (255, 0, 0);' – zynkn

+0

@Zack Pouvez-vous accepter? – zynkn

0

Dans la condition if vous comparez les deux chaînes différentes. Lorsque vous appliquez cette couleur au format rgb(), le navigateur la met en forme avec des espaces entre les arguments de couleur.

Vous avez donné: rgb(0,255,0)
Dans navigateur: rgb(0, 255, 0)

Donc, vous devez ajouter des espaces dans votre tableau colors. Changez votre tableau de couleurs à ceci,

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