2016-08-29 22 views
1

プロンプト番号のtimesテーブルを表示する小さな練習プログラムを作成しました。プロンプトが関数の後にある場合でも、関数の前にJavascriptプロンプトが表示されます

ユーザーにどの番号を入力するかを尋ねられたら、テーブルを表示します。ユーザーが-1以外の番号を入力した場合は、別の番号を尋ねます。

私が探しているシーケンスは、ユーザ、ユーザを促し、ユーザを促し、残念ながら、私のプログラムが動作する順序は、ユーザーがプロンプトです...ユーザーがテーブルを表示促し、テーブルを表示するプロンプトです...そしてそれだけで、各入力のテーブルが表示されます。

明らかに、コードはそのように書かれていません。

\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'ループはブラウザが持つ唯一のスレッドをブロックします.JSの実行が終了する前に結果をレンダリングする時間がありません。あなたはあなたが望むことを達成するために[タイマー](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers)を使用しなければなりません。 (そして、 'document.write'を適切なDOM操作関数に置き換えてください。) – Teemu

+1

ようこそ!スクロールしないようにコードを書式設定することにより、お手伝いをすることができます。 – zhon

+0

ありがとうございます@テム –

答えて

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は正しいです。そして、私は認めます、それは少しばかだが、これはうまくいくはずです。予期しない結果が出る可能性があるため、document.writeの使用を避けてください。代わりにもう一度試してくださいmethods of output

関連する問題