Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

256
Views
Al intentar volver a jugar después de volver a jugar, uno de los cuadrados no se colorea.

https://jsfiddle.net/h0avkn8p/ es mi código completo

Cuando juegues el juego dos veces, verás que la posición correcta del cuadrado del último juego permanece en blanco, ¿alguien sabe dónde está el problema? Creo que viene de esta parte de mi código.

 function genSquareColors(){ if(arr.length > 0){ arr.splice(0, arr.length); } for(let i = 0; i < 5; i++){ arr.push(genWrong()); // generates five incorrect squares } arr.push(answer); scramble(arr); console.log(arr); return arr; } function setColor(){ for(let i = 0; i < squares.length; i++){ squares[i].style.backgroundColor = arr[i]; } } function colorSquares(){ for(let i = 0; i < squares.length; i++){ squares[i].addEventListener("click", function(){ var clicked = this.style.backgroundColor; if(clicked === answer){ alert("You won!"); reset(); this.style.backgroundColor = setColor(); } else { this.style.backgroundColor = "#FFFFFF"; tries--; } }); } }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Veo eso aquí:

 function colorSquares(){ for(let i = 0; i < squares.length; i++){ squares[i].addEventListener("click", function(){

Estás adjuntando un nuevo detector de eventos a cada cuadrado cada vez que se ejecuta el juego . Entonces, a partir del segundo juego, un clic producirá dos resultados para cada oyente. En el tercer juego, habrá tres resultados, etc. Por lo tanto, un clic puede resultar en un cuadrado "ganador" y de color blanco.

Guarde una referencia a cada oyente en una variable persistente, luego llame a removeEventListener con cada uno de ellos, o use .onclick en su lugar, para que solo se mantenga la última asignación.

 function colorSquares(){ for(let i = 0; i < squares.length; i++){ squares[i].onclick = function(){ var clicked = this.style.backgroundColor; if(clicked === answer){ alert("You won!"); reset(); this.style.backgroundColor = setColor(); } else { this.style.backgroundColor = "#FFFFFF"; tries--; } }; } }
about 4 years ago · Juan Pablo Isaza Report

0

Lo que sucede aquí es que su detector de eventos se crea en los mismos elementos una y otra vez y nunca se limpia. Si consola.cierra sesión en el evento IE.

 for(let i = 0; i < squares.length; i++){ squares[i].addEventListener("click", function(){ var clicked = this.style.backgroundColor; console.log("oh no!") if(clicked === answer){ alert("You won!"); reset(); this.style.backgroundColor = setColor(); } else { this.style.backgroundColor = "#FFFFFF"; tries--; } }); } }

Notará que el evento de clic se llama muchas veces.

La solución sería almacenar el evento una vez que se aplica y luego, si el evento está configurado, restablecerlo. ES DECIR.

https://jsfiddle.net/CynderRnAsh/aukbnsp1/8/

O aplique el evento solo una vez, es decir. https://jsfiddle.net/CynderRnAsh/aukbnsp1/11/

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!