0

さて、これが私がやりたいことです:私は両方ともコンソールウィンドウとして機能するテキストフィールドとテキストエリアを持っています。私はjavascript(jQuery)を使用した独自のプログラミング言語を使用したインタープリターの非常に基本的なシミュレーションを開発しているため、ユーザーが以前に入力したプログラムの実行を開始すると、すべての命令を実行し、特別な命令に到達したときに( " leer ")ユーザーはこのコンソールに何かを入力し、プログラムの実行を一時停止する必要があります。「return」キーが押されたときにユーザーが入力を完了したことを私は知っています。その場合、プログラムは通常の実行フローを続行します。

現在、この動作は確認ボックスの動作と非常によく似ています。これは、入力を待機し、ユーザーがいずれかのボタン(yes / no)を押すと実行が続行されるためです。

皆さんが私の問題が何であるかを知っているように、私が十分に明確に説明したことを願っています。ここにコードを配置するのは素晴らしいことですが、コードのどの部分が役立つかはわかりません。コードのチャンクが必要な場合は、お知らせください。

ページは次のようになります。 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.');

ユーザーが [OK] をクリックすると、入力が文字列として返されます。キャンセルをクリックすると、null が返されます。

編集:

imsky の回答に対するあなたのコメントを見て、あなたが何をしたいのかをよりよく理解できたと思います。私が間違っている場合は修正してください。

ユーザーが何かを行うまで継続的に実行したいループがあります。その時点で、ユーザーが終了するまでループを待機させてから、ループの実行を続行しますか?

この場合は、ループを関数に入れて使用してみてくださいsetTimeout(yourfunction,0)。関数の反復ごとに、ユーザーが何かを行ったかどうかを確認します (つまり、ユーザーが何かを行ったときに変数を設定し、 内からチェックすることを意味しますyourfunction()。ユーザーが何かを行っていない場合は、(setTimeout トリックを使用して) ループを続けます。それ以外の場合)yourfuntion()ここでの唯一の問題は、実行yourfunctionの途中、つまり各「ループ」の間で中断できないことです。

例を次に示します: http://jsfiddle.net/PYabX/

これは理にかなっていますか、それとも完全にオフですか?

于 2012-04-08T15:35:24.330 に答える
0

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

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

于 2012-04-08T15:33:25.160 に答える