2012-04-08 54 views
0

嗯,这是我想要做的: 我有一个文本字段和一个textarea,它们都充当控制台窗口。我正在用JavaScript(jQuery)开发一种具有自己的编程语言的解释器的基本模拟,所以当我开始执行用户以前输入的程序时,我会遍历所有的指令,并在达到特定指令时(“ leer“)用户必须在这个控制台中键入一些东西并暂停程序的执行,我知道当按下'return'键时用户已经完成了输入。当发生这种情况时,程序会继续正常的执行流程。jQuery确认输入文字效果

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

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

以下是页面的外观。 chmaquina execution

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

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是一个关联数组,保持的指令的和作为一个值具有的功能,该指令“阅读”的名称是空的,它只是从输入获得一个值,并将该值复制到程序的一个变量中

感谢大家的帮助。

回答

1

我不确定我完全理解了这个问题,但它听起来像是在寻找prompt函数。

例如:

prompt('Please enter your input.'); 

用户单击OK之后,输入返回为一个字符串。如果他们单击取消,则返回null。

编辑:

上imsky的答案看到您的意见后,我想我有一个更好的了解你想要做什么。如我错了请纠正我。

你有一个循环,你想持续运行,直到用户做了一些事情,然后你希望你的循环等待用户完成,然后继续执行循环?

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

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

这是否有道理,还是我完全脱落?

+0

这就是我想要的确切行为,只是我不希望它出现在提示符中,而是出现在我自己的文本字段中。 – 2012-04-08 15:39:05

+0

这可以工作,我会测试它,让你知道@camupod – 2012-04-08 21:14:11

+0

@安德烈斯为你做了这项工作? – lakenen 2012-04-18 15:28:01

0

听起来好像你想在你的控制台输入字段上输入keyup处理程序。检查事件的关键代码,如果是Enter键,继续处理程序。

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

+0

我已经这样做了,但是当按下的键没有输入时,我的程序会继续运行,因为与确认对话框不同,keyup事件不会停止执行。 – 2012-04-08 15:36:24

+0

我明白了。这里有两个未知数:程序的外观,以及如何实现“leer”。您应该发布代码或更好的实时链接以获得更好的答案。 – imsky 2012-04-08 15:41:43

+0

完成后,问题更新与图像和代码,如果你需要别的只是让我知道 – 2012-04-08 15:50:43