Millisecondで定義された制限が設定されるまで、条件が満たされるまでJavaScriptの関数を一時停止する方法!
-
29-09-2019 - |
質問
これは緊急であり、私はそれに対する解決策を見つけることができませんでした。問題は次のとおりです。
複数のマシンに複数のコマンドを送信するWebアプリを設計しています。今、私が追加の入力が必要なコマンドのいくつか。 jqueryのポップアップウィンドウを設計しました。これにより、ユーザーにこの追加の入力を追加するように依頼しました。問題は、すべてのコマンドをループして、最後に選択したコマンドのウィンドウのみがポップアップすることです...これは、ユーザーが別のコマンドに入力する前に入力を入力する間、一時停止していないためです。
JavaScript/jQueryでの実行を継続することから関数を一時停止するにはどうすればよいですか?
Pseudocodeの例:
loop each command
{
for selected command popup windows;
// pause until user finishes input then go to
// next line where any function is processed
function(); //then loop again--> pause --> when user finishes continue to function() etc..
}
あなたの助けと忍耐のために、私は何の結果もせずにあらゆる種類の方法を試しました。 :)
解決
正しく理解している場合は、window.open()の代わりにwindow.showmodaldialog()を使用してウィンドウを起動する必要があると思います。
ダイアログが閉じられるまで実行を保持します。
別の方法は、コールバック関数を使用することです。
他のヒント
使用できません prompt
ユーザー入力を取得するためのダイアログ?それはモーダルであり、意志です 一時停止 ユーザーがプロンプトをキャンセルするか、値を提供しない限り、それが配置されるポイントで実行されます。そして、それを醜いと呼ばないでください。
var userValue = prompt("Ask your question");
見る ここで例. 。値を入力するか、キャンセルするまでしばらく待って、タイムスタンプに気づきます。
これは通常、コールバック関数を使用して行われます。あなたはすでにjqueryを使用しているので、あなたは 即興 プラグインが役立ちます。コールバックでモーダルプロンプトを実行できます。
のようなもの(上記のリンクの例9に部分的に基づいています)。これをデモとして投稿しました http://jsfiddle.net/28d3c/2/ .
var ind = 0;
var values = [];
var count = 3;
function nextPrompt(done)
{
function processPrompt(v, m, f)
{
if(v != undefined)
{
var input = f.alertName;
values[ind] = input;
}
if(++ind < count)
{
nextPrompt(done);
}
else
{
done();
}
}
var txt = 'Please enter value ' + ind + ': <br /><input type="text" id="alertName" name="alertName" value="name here" />';
$.prompt(txt,{
callback: processPrompt,
buttons: { Hey: 'Hello', Bye: 'Good Bye' }
});
}
nextPrompt(function()
{
for(var i = 0; i < count; i++)
{
alert(values[i]);
}
});
簡単な答えは、JavaScriptの実行を「一時停止」できないということです。それがあなたの目的のために十分に一時停止をエミュレートする場合、あなたはこのようなことをすることができますが、それは同じものではありません。
var answer;
var myInterval = setInterval(function () {
if (answer != undefined) {
clearInterval(myInterval);
// processing code
}
}, 1000);
answer = prompt("Please enter your name.");