2016-09-07 4 views
0

私のプログラムが正常に完了するようにするには、コマンドプロンプト変数askから値を取り込み、それが正しいかどうかチェックします。しかし、プレイヤーが時間内に応答しない場合、設定されたタイムアウト機能は実行され、したがって人生を減じます。設定されたタイムアウト機能がwin文をアクティブ化しないのはなぜですか?

私の問題は、askというプロンプトを入力すると、タイムアウト機能がまったくオフにならないということです。

また、私はfor-loopのすべてを持っているので、プレイヤーが正しい答えを得たときに、それは再び実行され、問題を解決する時間が減るので時間が減ります。私のコードは以下の通りです。

var win = null; 
var product = "123456"; 
time = 3000; 

for(var i = 0; i < 1; i++) { 
    confirm("Round will start after you close this confirm window."); 

    setTimeout(function() { 
     var ask = prompt("Enter code below: (QUICK) " + product + " (Answer for development purposes)"); 

     if(ask === product){ 
      win = true; 
      console.log("Hurrah!"); 
     } else { 
      win = false; 
      console.log("Arr. Well get em next time."); 
     } 
    }, 1); 

    //Why is this not activating??? 
    setTimeout(function() { 
     if (win === null || false) { 
      lives = lives - 1; 
      win = false; 

      console.log("Oh No! You ran out of time. Lives left: " + lives); 
     } 
    }, time); 

    time = time - 100;  
} 
+0

「命」とは何ですか?また、 'win === null || false'は 'winでなければなりません。=== null || win === false'またはそれ以外の場合は実行されません – Li357

+1

'prompt()'は単にタイムアウトをサポートしておらず、ブロッキング関数なので、完了するまで他のものは実行できません。 – jfriend00

+0

あなたはこれのためのjavascriptの唯一のソリューションが欲しいですか? @ jfriend00がコメントしたことは何でもあなたの問題の理由です。そして、jQueryはあなたの問題を簡単に解決できます。 – Manish

答えて

2

prompt()は、ユーザーが必要な入力を提供するまで戻りませんブロッキング機能で試すことができます。それはブロックされているので、ユーザーの入力を待っている間に他のJavascriptは実行されません。したがって、prompt()が入力待ちの間にsetTimeout()を実行することはできません。

したがって、ブロックされており、タイムアウト機能が組み込まれていないため、何をしようとするのにprompt()を使用することはできません。それは単にその機能を持たず、その機能のブロック性質により、setTimeout()を使用してタイムアウト機能を動作させることができなくなります。

これはWebページ内にあると仮定すると、別の形式の非ブロッキングプロンプト(Webページ上のフォーム要素など)を使用できます。その場合、ユーザー入力を求める入力要素を提示し、入力がない場合は起動するsetTimeout()を使用することができます。その場合のユーザーインターフェイスは非ブロッキングであるため、このUIがユーザーに提示されている間に他のJavascriptが実行され、そのようにタイムアウトを実装できます。また、ブロックprompt()関数の代わりに、イベントハンドラを処理するコードを変更する必要があります。

+0

@Bubblegumz - これはあなたの質問に答えましたか? – jfriend00

+0

はい。どうもありがとうございました。 – Bubblegumz

1

2回目のタイムアウトでif文が実行されないようです。あなたはこの

if(win == null || win == false){ 

        lives = lives - 1; 
        win = false; 

        console.log("Oh No! You ran out of time. Lives left: " + lives); 
       } 
関連する問題