2012-04-08 18 views
0

これは私がやりたいことです: 私は両方ともコンソールウィンドウとして機能するテキストフィールドとテキストエリアを持っています。私は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()からチェックすることを意味します)。そうでない場合は、何でもする必要があります。その後、yourfuntion()に再度電話をかけることができます。ここで唯一のキャッチは、実行中にyourfunctionを中断することはできず、それぞれの "ループ"の間にあることです。ここで

は例です:http://jsfiddle.net/PYabX/

はこのメイクセンスをないか、私は完全にオフにしていますか?

+0

それは私が欲しいと思う正確な振る舞いです。プロンプトではなく私自身のテキストフィールドでそれを欲しがっているだけです。 –

+0

これはうまくいくかもしれませんが、私はそれを試してみましょう@カムポッド –

+0

@アンドレスはあなたのためにこの仕事をしましたか? – lakenen

0

コンソール入力フィールドにkeyupハンドラーが必要なようです。イベントのキーコードを確認し、Enterキーであればプログラムの処理を続けます。

編集:OK、コードにwhileループがあることがわかりました。入力命令にヒットしたときに別のwhileループを導入し、Enterがヒットしたらそれを満たすようにしてください。

+0

私はすでにこれを行っていますが、押されたキーが入力されていないと、確認ダイアログと違ってキーアップイベントが実行を停止しないため、プログラムが実行を継続します。 –

+0

私は参照してください。ここでは2つの未知数があります:プログラムの外観と "leer"の実装方法。より良い答えを得るために、コードを投稿するか、よりよいライブリンクを投稿する必要があります。 – imsky

+0

完了すると、画像とコードで質問が更新されます。他に何か必要があればお知らせください。 –

関連する問題