0

好吧,这就是我想做的:我有一个文本字段和一个文本区域,它们都充当控制台窗口。我正在开发一个非常基本的解释器模拟,它有自己的编程语言和 javascript (jQuery),所以当我开始执行用户之前键入的程序时,我会遍历所有指令,并在到达特殊指令时 (" leer") 用户必须在此控制台中输入一些内容并暂停程序的执行,我知道当按下 'return' 键时用户已完成输入。当这种情况发生时,程序将继续其正常的执行流程。

现在,此行为与确认框的行为非常相似,因为它等待输入,并且当用户按下任何按钮(是/否)时,执行将继续。

我希望我已经解释得足够清楚,以便你们所有人都知道我的问题是什么。我知道在这里放置一些代码会很棒,但我真的不知道它的哪一部分会有所帮助,所以如果您需要一些代码,请告诉我。

这是页面的外观。 chmaquina 执行

这是用于执行每个程序的代码:

this.ejecutarPrograma = function(pidprograma) {
    var programa = this.listaProgramas[pidprograma];
    if(programa == undefined) throw "ERROR!, PID no encontrado"
    var posIni, posEnd;
    posIni = programa.obtenerRbp();
    posEnd = programa.obtenerRlc();
    this.cp = posIni;
    var temp = this.memoria[this.cp].split(/\s+/);
    while (this.cp < posEnd || temp[0] != "retorne") {
        try {
            if (temp[0] == "vaya") {
                this.cp = ACCIONES[temp[0]](this.cp, temp[1], programa);
            }
            else if (temp[0] == "vayasi") {
                this.cp = ACCIONES[temp[0]](this.memoria[0], this.cp, temp[1], temp[2], programa);
            }
            else if (temp[0] == "nueva" || temp[0] == "etiqueta" || temp[0] == "retorne") {
                // nada de nada por aca porque estos ya estan implementados
                this.cp++;
            }
            else {
                this.memoria[0] = ACCIONES[temp[0]](this.memoria[0], temp[1], programa);
                this.cp++;
            }
            var temp = this.memoria[this.cp].split(/\s+/);
        }
        catch (e) {
            throw "Linea " + (this.cp).toString() + ": " + e;
        }
    }
};

ACCIONES 是一个关联数组,它保留指令的名称,并且作为一个值具有函数,指令“leer”是空的,它只是从输入中获取一个值并将该值复制到程序的变量中

感谢大家的帮助。

4

2 回答 2

1

我不确定我是否完全理解这个问题,但听起来你正在寻找这个prompt功能。

例如:

prompt('Please enter your input.');

用户单击确定后,输入作为字符串返回。如果他们单击取消,则返回 null。

编辑:

在看到您对 imsky 答案的评论后,我想我对您想要做什么有了更好的理解。如我错了请纠正我。

您有一个循环,您希望连续运行直到用户执行某项操作,此时您希望循环等待用户完成,然后继续执行循环?

如果是这种情况,请尝试将循环放入函数中并使用setTimeout(yourfunction,0); 函数的每次迭代,检查用户是否做了某事(这意味着当用户做某事时设置一个变量并从内部检查它yourfunction()。如果用户没有做某事,继续循环(通过使用 setTimeout 技巧),否则做任何你需要做的事情,之后你可以再次调用yourfuntion()这里唯一的问题是你不能yourfunction在执行过程中中断,只能在每个“循环”之间中断。

这是一个例子:http: //jsfiddle.net/PYabX/

这是有道理的,还是我完全离开了?

于 2012-04-08T15:35:24.330 回答
0

听起来您想要控制台输入字段上的keyup处理程序。检查事件的键码,如果是回车键,继续处理程序。

编辑:好的,我看到你的代码中有一个while循环。当你点击输入指令时尝试引入另一个 while 循环,并在点击 Enter 时满足它。

于 2012-04-08T15:33:25.160 回答