2016-09-25 9 views
1

私のJSコードの構造にはある種の奇妙な問題があります。それはBrainfuckからJavaScriptへのコンバータです。次に、生成したコードを実行します。プロンプトを再作成する();機能は<input>

これを念頭に置いて、私はprompt();コマンドに問題があることに気付きました。場合によっては、前のコマンド(DOMの変更)が完了する前にプロンプ​​トボックスを表示するように見えることがあります。

私の解決策は、のボックスを表示することです。最初はCSSのdisplay:noneに設定されています。しかし、入力が変わるのを待つ方法が必要です。私はこのコードを試しました:

while (document.getElementById("input") == ""){} 

しかし、これは、DOMをフリーズします。私は受動的に任意のユーザー入力を待つ方法が必要です、そしてスクリプトを続行してください。

おかげなど、外部関数、私はonkeydownを使用することはできません、覚えておいてください!

+0

このコンテキストは何ですか?コードはブラウザで実行されますか?もしそうなら、本当の 'window.prompt()'を使うことができませんか? – Pointy

+0

非同期コードを使用する必要があります。非同期コードは、input要素にイベントハンドラを割り当てることになります。 – trincot

答えて

1

alertconfirmpromptなどのネイティブ関数を使用する以外に、スクリプトの実行を停止する方法はありません。

setTimeoutの中にプロンプ​​トをラップしてみてください。 0の値から開始して、動作するかどうかを確認します。 0の値でsetTimeoutを使用して

setTimeout(function() { 
    prompt('your prompt'); 
}, 0); 

はイベントループの背面に、プロンプトの実行を押して、そしておそらくあなたのDOMの更新の後に実行されることがあります。

ここでこの技術について詳しく読む:https://www.quora.com/What-does-setTimeout-with-a-0ms-delay-do

1

は、ノンブロッキングな方法でユーザーの入力を待つためには、非同期のコードを実行する必要があります。これは、特定のイベントが発生したときに呼び出されるコールバック関数を提供することによって行います。入力値が送信されたときにあなたのケースでは、これは次のようになります。

var inp = document.getElementById("inp"); 
 

 
inp.addEventListener('change', function(e) { 
 
    var value = this.value; 
 
    alert('you entered: ' + value); 
 
    // all code that needs the value, should come here, 
 
    // or should be called from here. 
 
});
Exit field to submit value: 
 
<input id="inp">

関連する問題