Я тоже не JS, но ... я могу объяснить, как это должно работать;Однако я не знаю, почему вы получаете значения, которые вы используете для упомянутых вами ключей.
keychar = String.fromCharCode(key);
Это проверяет, является ли ключ печатным символом (буква, знак пунктуации и т. Д.).)
if ((key == null) || (key == 0) || (key == 8) ||
(key == 9) || (key == 13) || (key == 27))
// Control key
Вышеприведенная проверка проверяет, является ли ключ пустым ИЛИ (||
) `0 или 8 (возврат), или 9 (табуляция) или 13 (0x0D, или ENTER) или 27 (0x1Bили ESCAPE) - это именно тот логический результат, который вы ожидаете: ЕСЛИ или или или ...
else if (((chars).indexOf(keychar) > -1))
Это проверяет, находится ли keychar
встрока символов, переданная как параметр chars