嗯,这就是我想做的事情: 我有一个文本字段和一个textarea,它们都充当控制台窗口。我正在用javascript(jQuery)开发一个带有自己编程语言的解释器的非常基本的模拟,所以当我开始执行用户之前键入的程序时,我会查看所有指令并在达到特殊指令时(“ leer“)用户必须在此控制台中键入内容并暂停程序的执行,我知道用户在按下”return“键时已完成输入。当发生这种情况时,程序继续其正常的执行流程。
现在,这种行为与确认框非常相似,因为它等待输入,当用户按下任何按钮时(是/否),执行继续。
我希望我已经解释清楚了所以你们所有人都知道我的问题是什么。我知道在这里放置一些代码会很棒,但我真的不知道它的哪一部分会有所帮助,所以如果你需要一些代码,请告诉我。
以下是页面的外观。
以下是用于执行每个程序的代码:
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”为空它只是从输入中获取一个值并将该值复制到程序的一个变量中
感谢大家的帮助。
答案 0 :(得分:1)
我不确定我是否完全理解这个问题,但听起来你正在寻找prompt
函数。
例如:
prompt('Please enter your input.');
用户单击“确定”后,输入将作为字符串返回。如果他们单击取消,则返回null。
编辑:
在看到你对imsky答案的评论之后,我想我对你想做什么有了更好的理解。如果我错了,请纠正我。
你有一个循环,你想连续运行,直到用户做某事,此时你希望你的循环等待用户完成,然后继续执行循环?
如果是这种情况,请尝试将循环放在函数中并使用setTimeout(yourfunction,0)
;函数的每次迭代,检查用户是否做了某些事情(这意味着当用户做某事时设置变量并从yourfunction()
内检查它。如果用户没有做某事,继续循环(通过使用setTimeout技巧),否则做你需要的任何事情,之后你可以再次调用yourfuntion()
。这里唯一的问题是你不能在exectution中间中断yourfunction
,只是在每个“循环之间”
以下是一个示例:http://jsfiddle.net/PYabX/
这是否有意义,还是我完全离开了?
答案 1 :(得分:0)
听起来您需要控制台输入字段上的keyup处理程序。检查事件的密钥代码,如果是Enter键,继续处理程序。
编辑:好的,我看到你的代码中有一个while循环。当你点击输入指令时尝试引入另一个while循环,并在Enter命中时满足它。