Оператор Switch, возвращающий разные результаты при вызове с одинаковым вводом в JavaScript - PullRequest
0 голосов
/ 19 февраля 2019

Я пишу Linux "консольный эмулятор" как пасхальное яйцо для моего сайта.Я обрабатываю команды, данные с помощью оператора switch, следующим образом:

function processCommand(command) {
    var args = command.split(" ");
    console.log(args[0]);
    var res;
    switch(args[0]) {
        case "ls":
            res = ls($(".line.new .directory", args[1], args[2]).text());
            break;
        default:
            res = args[0] + ": command not found";
    }
    $(".line.new .response").html(res);
}

Это вызывается следующим JQuery:

$(document).keydown(function(e) {
    ...
    else if(e.which == 13) {
        $(".line.new").append('<div class="response"></div>');
        processCommand($(".line.new .input").text()); // <-------------
        $(".line").removeClass("new").addClass("old");
        $(".main").append(...);
    }
});

Когда я даю ввод "ls" в первый раз, все ведет себя как ожидалось, однако при повторном запуске коммутатор переходит в режим по умолчанию.Значение, возвращаемое console.log(args[0]) в строке 3, остается прежним.

Я что-то не так делаю?

Редактировать :

Fiddle: https://jsfiddle.net/L90burfq/

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

См. https://jsfiddle.net/wkjy7du2/.

var args = command.split(" ");
    var arg =args[0];
    var res;
    switch(arg.trim()) {
        case "ls":
  1. В нем есть дополнительное место для повторного щелчка. Так что используйте с trim()
  2. Лучше объявить как новыйпеременная для подтверждения переключателя
0 голосов
/ 19 февраля 2019

Если вы добавите console.log({command});, вы увидите, что начиная со второго вызова функции, значение command начинается с \r (символ возврата каретки).

Как общее правилоВы должны обрезать command перед тем, как разбить его на слова, иначе он завершится неудачно даже при первом вызове, когда его значение начинается с пробела.

0 голосов
/ 19 февраля 2019

Если вы проверите длину args[0], вы увидите, что это 2 символа в первый раз и 3 символа во второй раз.

Измените свой переключатель, чтобы обрезать все пробелы перед проверкой случаеви это будет работать:

switch(args[0].trim())
...