2012-04-08 51 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