2012-12-04 38 views
2

我有一个设置,其中我允许用户在一个普通的HTML文本字段输入命令。我处理文本字段上的onkeypress事件,检查它是否是按下的输入键,并解析并执行命令。获取用户输入以JavaScript而不使用提示

一个例子可以是:

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); 
} 

这甚至可能吗?

我不知道我能在这里解释一下,但如果有人认为他们可以帮助我以某种方式请让我知道:-)

一种解决方案可能是实现全局状态变量而在按键-事件处理程序使用此作为一种机制来路由输入命令,类似:

inputControl.onkeypress = function(e) { 
    if (e.which == 13) { 
     if (state.additionalInputPending && currentCommand != null) { 
      currentCommand.executeWithAdditionalInput(); 
     } else { 
      // perform regular command execution 
     } 
    } 
} 

这样我的“应用程序”需要内部状态变量来处理,并存储按键之间的currentCommand 。

回答

0

你可以使用一个jQuery/JavaScript的解决方案,其中显示有一个“幻想”对话框(不是JS提示),要求输入。

http://trentrichardson.com/Impromptu/#Examples非常最后一个例子展示形式。即兴只是对话/提示替代方案的许多(许多)解决方案之一。

想到的唯一的另一种选择是直接在你创造更多的像一个真正的命令行工具的JS控制台做到这一点。

+0

是的,我正在寻找的是会模仿的命令行工具的解决方案。我当前的设置是无状态的,所以我无法将额外的信息路由到我以前失败的命令执行尝试。我所知道的老派文字冒险过这样的能力: '>采取 >>你想采取什么样的? >红色书籍 >> Book taken'(我无法添加换行符) – Thomas

+0

您应该创建一个'堆栈'或一个输入变量来排序,只有在创建完整命令时才能执行。这与你上面所做的相似。如果状态失败,然后获得额外的输入,然后再次调用doSomeStuff。如果再次失败,请询问更多输入,直至完成。为了解决这个问题,你只需要跟踪旧的参数并合并成新的参数。如果他们取消(例如ctrl + c),那么就扔掉你的参数并重新提示。它应该是一个非常简单的工作流程。 –