2016-08-29 8 views
1

liegt. Ich habe ein kleines Übungsprogramm geschrieben, das die Zeittabelle für eine angeforderte Nummer anzeigt.Meine Javascript-Eingabeaufforderung wird vor der Funktion ausgeführt, auch wenn die Eingabeaufforderung nach der Funktion

Ich möchte, dass die Tabelle angezeigt wird, nachdem der Benutzer nach der Nummer gefragt wurde. Wenn der Benutzer eine andere Nummer als -1 eingibt, möchte ich nach einer anderen Nummer fragen.

Die Reihenfolge, nach der ich suche, ist die Eingabeaufforderung des Benutzers, zeigen Sie die Tabelle, den Benutzer auffordern, die Tabelle anzuzeigen ... Leider fordert die Sequenz, in der mein Programm arbeitet, den Benutzer auf, fordert den Benutzer auf, fordert den Benutzer auf ... UND NUR NACH dem zeigen die Tabellen für jeden Eingang.

Offensichtlich ist der Code nicht auf diese Weise geschrieben.

\t \t // get number to show time table for 
 
\t \t var aNumber = prompt("Enter the number for time table or -1 to stop the program", ""); 
 
\t \t 
 
\t \t while(aNumber != -1) { 
 
\t \t \t timeTableFrom(aNumber); // show time table for the first number 
 
\t \t \t aNumber = prompt("Enter the number for time table or -1 to stop the program", ""); // ask for another number. HERE IS THE PROBLEM - THIS LINE RUNS BEFORE THE PREVIOUS ONE! 
 
\t \t \t 
 
\t \t } 
 
\t \t 
 
\t \t document.write("stopped"); 
 
\t \t 
 
\t \t \t \t 
 
\t \t 
 
\t \t function timeTableFrom(number) 
 
\t \t { 
 
\t \t \t for (var i = 0; i <= 10; i++) 
 
\t \t \t { 
 
\t \t \t \t document.write(number + " * " + i + " = " + number*i + "<br />"); 
 
\t \t \t } 
 
\t \t \t 
 
\t \t }

+1

'while' Schleife blockiert den einzigen Thread der Browser hat, gibt es keine Zeit für das Rendern der Ergebnisse, bevor die JS-Ausführung endet. Sie müssen einen [timer] (https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers) verwenden, um zu erreichen, was Sie wollen. (Und ersetzen Sie 'document.write' durch eine geeignete DOM-Manipulationsfunktion.) – Teemu

+1

Willkommen bei Stack Overflow! Sie können uns helfen, indem Sie Ihren Code formatieren, damit wir ihn nicht scrollen können. – zhon

+0

Vielen Dank @Teemu –

Antwort

0

// get number to show time table for 
 
var aNumber = null; 
 
var div = document.getElementById("textDiv"); 
 

 
setTimeout(enterNumber, 0); 
 

 
function enterNumber() 
 
{ 
 
    aNumber = prompt("Enter the number for time table or -1 to stop the program", ""); 
 

 
    if (aNumber != -1) { 
 
    timeTableFrom(aNumber); // show time table for the first number 
 
    setTimeout(enterNumber, 0); 
 
    } 
 
    else 
 
    div.innerHTML += "stopped" 
 
} 
 

 
function timeTableFrom(number) 
 
{ 
 
    for (var i = 0; i <= 10; i++) 
 
    { 
 
    div.innerHTML += number + " * " + i + " = " + number*i + "<br />"; 
 
    } 
 
}
<div id="textDiv"> 
 
</div>

@Teemu korrekt ist. Und ich gebe zu, es ist ein bisschen schlampig, aber das sollte funktionieren. Vermeiden Sie die Verwendung von document.write, da dies zu unvorhersehbaren Ergebnissen führen kann. Versuchen Sie stattdessen andere methods of output

Verwandte Themen