Я создаю терминал 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;
}
}
}
Ожидается:
Когда нажата стрелка вверх, отобразитсястарая команда
Когда нажата стрелка вниз, отобразить более свежую команду (если пользователь в настоящее время просматривает старые команды)
Фактические результаты
Приведенный выше код пропускает записи
В некоторых случаях записывает undefined
на вход
Это не очень хорошо, если очистить журнал.