2

ユーザーが通常の 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 を保存する必要があります。

4

1 に答える 1

0

「ファンシー」ダイアログ(JSプロンプトではない)を表示して入力を求めるjquery/javascriptソリューションを使用できます。

http://trentrichardson.com/Impromptu/#Examples 最後の例はフォームを示しています。Impromptu は、ダイアログ/プロンプトの代替手段に対する多くの (非常に多くの) ソリューションの 1 つにすぎません。

頭に浮かぶ唯一の他のオプションは、実際のコマンドライン ツールのように作成している JS コンソールで直接実行することです。

于 2012-12-04T13:15:12.997 に答える