Как получить историю ввода, используя стрелки вверх и вниз? - PullRequest
0 голосов
/ 28 января 2019

Я создаю терминал JavaScript, который отправляет команды на серверный скрипт.Ввод текста следующий: <input type="text" id="regularTrm">

Когда команда отправляется, она добавляется в журнал как параграф с именем класса entry.Приведенная ниже функция запускается событием onkeyup.

function trm_keyUp(e) {
    var ALT_CODE = 18;
    var vKey = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
    //console.log(vKey);
    if ( !e.metaKey ) {
        e.preventDefault();
    }
    if (e.keyCode === 38) {
        event.preventDefault();
        if (cmdSt) {
            cmdSt = false;
            currentCommand = $("#regularTrm").val(); //store currently typed command
            var c = $(".entry")[viewCommand]; //select the specific entry
            c = $(c).children()[1]; //select second child
            c = $(c).html(); //get html of selected child
            $("#regularTrm").val(c); //set the value of the input
        }
        else {
            if (viewCommand > 0) {
                var c = $(".entry")[viewCommand];
                c = $(c).children()[1];
                c = $(c).html();
                $("#regularTrm").val(c);
            }
            else {
                var c = $(".entry")[0];
                c = $(c).children()[1];
                c = $(c).html();
                $("#regularTrm").val(c);
            }
        }
        if (viewCommand > -2) {
            --viewCommand; //decend a level (show a more recent command)
        }

    }
    else if (e.keyCode === 40) {
        event.preventDefault();
        if (viewCommand + 2 < $(".entry").length) {
            var c = $(".entry")[viewCommand+2]; //retrieve the specific entry
            c = $(c).children()[1];
            c = $(c).html();
            $("#regularTrm").val(c);
            ++viewCommand;
        }
        else {
            $("#regularTrm").val(currentCommand); //if returned to present, type in the initial command
            cmdSt = true;
        }
    }
}

Ожидается:

  1. Когда нажата стрелка вверх, отобразитсястарая команда

  2. Когда нажата стрелка вниз, отобразить более свежую команду (если пользователь в настоящее время просматривает старые команды)

Фактические результаты

  1. Приведенный выше код пропускает записи

  2. В некоторых случаях записывает undefined на вход

  3. Это не очень хорошо, если очистить журнал.

...