0

私は非常に単純な端末エミュレーター (ish) アプリを作成しておりup-arrow、前のコマンドを入力にロードする機能を構築しようとしています。私はこれまでに持っているものに近づいていますが、数学で何かが欠けていて、正しく機能していません...

command_history = {};
command_counter = -1;
history_counter = -1;

$('#term-command').keydown(function(e){
    code = (e.keyCode ? e.keyCode : e.which);
    // Enter key - fire command
    if(code == 13){
        var command = $(this).val();
        command_history[command_counter++] = command;
        history_counter = command_counter;
        alert('Run Command: '+command); 
        $(this).val('').focus(); 
    // Up arrow - traverse history
    }else if(code == 38){
        if(history_counter>=0){
            $(this).val(command_history[history_counter--]);
        }
    }
});

...#term-command私の入力はどこにありますか。

4

3 に答える 3

1

問題は、配列として使用しているため、 array ではなくcommand_historyobject として定義したことだと思います。{}[]

また、事前にデクリメントしたいと思います--history_counter

この作業フィドルを参照してください:

http://jsfiddle.net/5DZxs/1/

したがって、JavaScript は次のようになります。

command_history = []; //<-- Change here
command_counter = -1;
history_counter = -1;

$('#term-command').keydown(function(e){
    code = (e.keyCode ? e.keyCode : e.which);
    // Enter key - fire command
    if(code == 13){
        var command = $(this).val();
        command_history[command_counter++] = command;
        history_counter = command_counter;
        alert('Run Command: '+command); 
        $(this).val('').focus(); 
    // Up arrow - traverse history
    }else if(code == 38){
        if(history_counter>=0){
            $(this).val(command_history[--history_counter]); //<-- Change here
        }
    }
});​
于 2012-09-21T13:16:24.387 に答える
1

-1の配列インデックスにアクセスしようとしている問題だと思います

command_history[command_counter++] = command;

最初は command_counter = -1 - 0 に初期化するか、javascript に存在する場合は事前インクリメント (++command_counter) を使用します。また、command_history を配列として宣言します。私が行う変更:

command_counter = 0;

command_history = [];

コマンド履歴は配列です -

于 2012-09-21T13:16:01.337 に答える
0

ステートメントの変更

command_history[command_counter++] = command;

command_history[++command_counter] = command;

command_history 変数を次のような配列として作成しますcommand_history = [];

それはあなたの問題を解決します

于 2012-09-21T13:17:11.790 に答える