ユーザーが通常の html テキストフィールドにコマンドを入力できるようにするセットアップがあります。テキストフィールドで onkeypress イベントを処理し、押されたのが Enter キーかどうかを確認し、コマンドを解析して実行します。
例は次のとおりです。
deletefile /testfolder/testfile.html
コードの種類は次のようになります。
inputControl.onkeypress = function(e) {
if (e.which == 13) {
var outputMessage = commandHandler.executeCommand(inputControl.value);
printOutputToScreen(outputMessage);
inputControl.value = "";
inputControl.focus();
}
}
(ちなみに、これは私のコードが実際にどのように見えるかではなく、単なる例です)
ここでの考え方は、コマンドを書いたり、出力を見たり、別のコマンドを書いたり、出力を見たりできるようにすることです。
executeCommand はコマンド文字列を解析し、適切な引数を指定して特定のコマンドを呼び出します。
> deletefile /test1.html
The file was deleted
> deletefile /test2.html
An error occured while trying to delete the file
この部分は簡単です。私が助けを必要としているのはこれです: ユーザーが単に「deletefile」と入力した場合、(outputarea を使用して) ユーザーに「どのファイルを削除しますか?」と尋ねることができるようにしたいと考えています。
私はこれを行うことができることを知っています:
var additionalInput = prompt("Which file?");
、しかし、プロンプトを使用したくありません。
私の不自然な例を忘れて、次のように、javascript の途中で (プロンプトを使用せずに) ユーザーに入力を求める良い方法を知っている人はいますか?
var status = doSomeStuff(args);
if (status.fail) {
tmp = getUserInput();
doSomeFinalStuffBasedOnTheUserInput(tmp);
}
これは可能ですか?
ここで自分自身を説明できるかどうかはわかりませんが、誰かが何らかの形で私を助けることができると感じたら、私に知らせてください:-)
1 つの解決策として、グローバルな状態変数を実装し、これを keypress-eventhandler のメカニズムとして使用して、次のように入力をコマンドにルーティングすることが考えられます。
inputControl.onkeypress = function(e) {
if (e.which == 13) {
if (state.additionalInputPending && currentCommand != null) {
currentCommand.executeWithAdditionalInput();
} else {
// perform regular command execution
}
}
}
このように、私の「アプリ」は内部状態変数で処理し、キープレス間で currentCommand を保存する必要があります。