2017-06-13 3 views
1

Auf Knopf klicken Sie (Spielkontext), ich möchte Pause machen, um die richtige Antwort zu zeigen, bevor die nächste Frage angezeigt wird. wie kann ich es tun? Ich versuche dies:jquery pause vor dem nächsten Schritt

showCorrectAnswer(); 
questionCounter++; 
setTimeout(displayNext(), 6000); 
/* Or */ 
showCorrectAnswer(); 
questionCounter++; 
wait(6000); 
displayNext(); 

/*with wait*/ 
function wait(ms){ 
    var start = new Date().getTime(); 
    var end = start; 
    while(end < start + ms) { 
     end = new Date().getTime(); 
    } 
} 

aber nicht funktioniert. Dank

+0

Kein Fehler. Wenn der Benutzer seine Antwort auswählt und auf "Weiter" klickt, wird automatisch der nächste angezeigt. keine Zeit für den Benutzer, um die richtige Antwort zu sehen. Ich möchte ihm seine Antwort in Gelb und die richtige Antwort in Rot mit Erklärungen für 6 Sekunden zeigen, bevor ich die nächste Frage zeige. – Cutis

+0

JavaScript kann manchmal verwirrend sein. Wenn Sie daran interessiert sind, wie man es in jQuery macht, ist die Antwort von @ Panos genau das, wonach Sie suchen: 'delay()' ist der jQuery-Wrapper für 'setTimeout()' und. .. funktioniert einfach. Wenn Sie verstehen wollen, warum es nicht funktioniert hat, hoffe ich, dass meine Antwort klar genug ist. –

+1

Danke, deine Antwort ist klar und hilft mir. – Cutis

Antwort

1

Sie setzen alle Ihre Code soll entweder eine anonyme passieren Funktion zu setTimeout() (in denen Sie platzieren, was Sie ausführen möchten, wenn das Zeitlimit abläuft) oder den Namen einer definierten Funktion. Wenn Sie () nach dem Namen platzieren, wie Sie getan haben, wird die Funktion ausgeführt, wenn die setTimeout() analysiert wird, nicht wenn es abläuft, erwartet das Ergebnis der Ausführung Ihrer Funktion eine andere Funktion, die ausgeführt wird, wenn die setTimeout() abläuft - ähnlich wie die anonyme Funktion tut es.

Einer der folgenden Schritte wird wie erwartet funktionieren. Name der Funktion:

showCorrectAnswer(); 
questionCounter++; 
setTimeout(displayNext, 6000); 

... oder anonyme Wrapper:

showCorrectAnswer(); 
questionCounter++; 
setTimeout(function(){ 
    displayNext(); 
}, 6000); 

In den meisten realen Situationen ist es ratsam, questionCounter Wert innerhalb der displaynNext() Funktion zu ändern, nicht vor.

1

Mit jquery können Sie:

$('.container').hide().delay(6000).fadeIn(displayNext());

+0

Es gibt drei Probleme mit Ihrer Lösung. ** 1. ** Sie erklären nichts, wie Sie nicht wissen, wie oder warum es funktioniert. Obwohl solche Antworten manchmal nützlich sind, werden sie im allgemeinen als minderwertig angesehen. Siehe [Antwort] für Details. ** 2. ** Sie gehen davon aus, dass es einen '.container' gibt, der die Fragen enthält. Was ist, wenn es nicht ist? Was, wenn es auch Dinge enthält, die nicht ein- und ausgeblendet werden sollten? ** 3. ** Ihre Lösung zeigt die nächste Frage nach '6400ms' an, da die Standarddauer von' fadeIn' '400ms' ist. Sie sollten also "6000" zu "5600" ändern. –

+0

Andrei Ich bin unterwegs, mobile Version des Stacks;) –

0

Check out diese

Sie einen kleinen Fehler setTimeout(displayNext(),6000) getan haben, die sofort fordert stattdessen sollten Sie nur Funktionsnamen übergeben. setTimeout(displayNext,6000)

Wenn Sie mit den Parametern nennen wollen sicherstellen, dass Sie als eine Funktion schreiben und darin dann setTimeout(function(){displayNext(parameter1,parameter2);},6000)

function displayNext(){ 
 
alert("display"); 
 
}
<input type="number" step="1000" id="num_milisecond" value=1000> milliseconds 
 
<input type="button" onclick="setTimeout(displayNext, document.getElementById('num_milisecond').value);" value="click to allert">

+0

Ich habe das gemacht. es funktioniert nicht wie ich will. – Cutis

Verwandte Themen