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

164
Views
Llame a la función javascript después de presionar dos botones

Estoy tratando de programar un juego web al estilo de Duolingo. En un escenario, después de presionar dos botones, se debe llamar a una función para seguir avanzando. Pero he estado luchando para encontrar soluciones en línea o resolverlo por mí mismo, ya que esta es la primera vez que experimento con javascript.

Para escenarios con una sola respuesta, he estado usando esta función que se llama después de presionar un solo botón y funciona bien:

 function answer (URL) { setTimeout( function() { window.location = URL }, 3500 ); document.getElementById("answerDisplay").style.display = "inline"; document.getElementById("buttonCorrectAnswer").style.display = "none"; document.getElementById('video').play(); }

Si he estado tratando de encontrar una solución comprobando si "answerDisplayOne" y "answerDisplayTwo" están visibles y luego llamando a una función pero sin éxito:

 function answerOne() { document.getElementById("answerDisplyOne").style.display = "inline"; document.getElementById("buttonCorrectAnswerOne").style.display = "none"; } function answerTwo() { document.getElementById("answerDisplayTwo").style.display = "inline"; document.getElementById("buttonCorrectAnswerTwo").style.display = "none"; } if ( $("#answerDisplayOne").css('display') == 'inline' && $("#answerDisplayTwo").css('display') == 'inline'){ function delayTwo (URL) { setTimeout( function() { window.location = URL }, 3500 ); document.getElementById('video').play(); } }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Si necesita dos eventos independientes para desencadenar un tercero, debe monitorear ambos eventos y tener alguna forma de recordar su historial. Cada vez que ocurre uno de los eventos, verifica si el otro evento ha ocurrido anteriormente y, de ser así, activa el tercero. De lo contrario, debe recordar el evento que ocurrió hasta que se detecte el otro evento. (Creo que entiendes esto, pero puede que no tengas claro cómo hacerlo en javascript).

Mi fragmento de trabajo a continuación es un ejemplo en el que se dibujan dos cuadros rojos. Si se hace clic en cualquiera, cambiará, pero un tercer cuadro no cambiará a menos que se haga clic en ambos. No importa en qué orden se hizo clic en las dos casillas. En este ejemplo, la 'memoria' de los clics anteriores se realiza comprobando si la otra casilla ya ha cambiado.

Fundamentalmente, el ejemplo ilustra cómo configurar detectores de eventos para monitorear constantemente el cambio. Son funciones aplicadas a objetos de página que toman dos argumentos 1) el evento a escuchar, en este caso click' pero podría ser change o mouseover el mouse, etc. y 2) la acción a realizar cuando se detecta el evento. Por lo general, como en este ejemplo, se puede incluir una función huérfana o de flecha como argumento real (pero también funcionará una referencia a una función externa).

 // make references to objects on page: const firstTarget = document.getElementById('target1'); const secondTarget = document.getElementById('target2'); const output = document.getElementById('output'); // set event listeners for click on first target: firstTarget.addEventListener('click', event => { event.target.style="background:yellow"; event.target.innerHTML="1st clicked"; checkStatus(); }); // end event listener 1; // set event listeners for click on second target: secondTarget.addEventListener('click', event => { event.target.style="background:green"; event.target.innerHTML="2nd clicked"; checkStatus(); }); // end event listener 2; function checkStatus() { if (firstTarget.innerHTML=="1st clicked" && secondTarget.innerHTML=="2nd clicked") { output.innerHTML = "BOTH CLICKED!"; output.style="background:red"; } // end if block; } // end checkStatus function;
 div { display: inline-block; background: red; width: 80px; height: 30px; border: 1px solid black; padding: 10px; margin: 5px; } #output { background: white; width: 195px; height: 35px; }
 <div id="target1">click me</div> <div id="target2">click me</div> <br> <div id="output"></div>

about 4 years ago · Juan Pablo Isaza Report

0

Si he estado tratando de encontrar una solución comprobando si "answerDisplayOne" y "answerDisplayTwo" están visibles y luego llamando a una función pero sin éxito:

Esto sucede porque verifica la condición solo una vez¹:

 if ( $("#answerDisplayOne").css('display') == 'inline' && $("#answerDisplayTwo").css('display') == 'inline'){ function delayTwo (URL) { setTimeout( function() { window.location = URL }, 3500 ); document.getElementById('video').play(); } }

Significa que verifica la condición y define una función delayTwo IF #answerDisplayOne y #answerDisplayTwo tienen la propiedad css "display" establecida en "inline". Esto no es lo que quieres.

Desea verificar la condición cada vez que el usuario presiona un botón:

 function answerOne() { document.getElementById("answerDisplyOne").style.display = "inline"; document.getElementById("buttonCorrectAnswerOne").style.display = "none"; check(); } function answerTwo() { document.getElementById("answerDisplayTwo").style.display = "inline"; document.getElementById("buttonCorrectAnswerTwo").style.display = "none"; check(); } function check() { if ($("#answerDisplayOne").css('display') == 'inline' && $("#answerDisplayTwo").css('display') == 'inline'){ setTimeout( function() { window.location = URL }, 3500 ); document.getElementById('video').play(); } }

¹ por una vez quiero decir literalmente una vez. JavaScript se ejecuta de arriba a abajo. Es por eso que usamos detectores de eventos para ejecutar código una vez que sucedió algo. No podemos saber de antemano cuándo el usuario hará clic en un botón, ¿verdad?

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!