Да вроде нет ошибок)
1) Только, не желательно называть функции одной буквой, если из контекста кода не понятно, о чем эта буква)
function t() → function light_on(), например
2) let k = document.querySelectorAll('.key'); — каждый раз при нажатии кнопки происходит поиск всех элементов и дальнейший перебор для нахождения нужного. Было бы хорошо один раз собрать их в объект и при нажатии кнопки - сразу по "адресу" взять нужжный элемент.
3) .onkeydown — в одном месте `on`, а в другом сразу eventListener) Его тоже можно записать как .addEventListener("keydown", ..)
4) функция названа `cplKeypress` а вызывается при "keydown" — может запутать.
______
В общем-то, добавил бы data-code="CapsLock" в HTML и записал бы примерно так:
(
https://jsfiddle.net/hs1zaLed/ )
let getElementByCode = (function create_function() {
let _storage = {};
let keys = document.querySelectorAll('.key');
for (let i = 0; i < keys.length; i++) {
_storage[ keys[ i ].dataset.code ] = keys[i];
}
/* На выходе получается:
* _storage = {
* "KeyA": html-объект,
* "KeyB": html-объект,
* ...
* "CapsLock": html-объект,
* ...
* }
*/
return function(code) {
// эта функция получает имя getElementByCode
return _storage[code] || null;
// А при вызове, например, getElementByCode("KeyA") —
// сразу вернет этот html-объект из _storage, без доп поиска.
}
})();
set_light_features();
function set_light_features() {
let input = document.querySelector('.i');
input.addEventListener("keydown", light_on);
input.addEventListener("keyup", light_off);
function light_on(event) {
let action = (event.code == "CapsLock") ? "toggle" : "add";
// Если капс - переключать класс, иначе - добавлять.
getElementByCode(event.code).classList[action]("onlight");
}
function light_off(event) {
if (event.code == "CapsLock") return;
getElementByCode(event.code).classList.remove("onlight");
}
}
____________
getElementByCode — мог бы быть частью бОльшего объекта, а не создаваться так "в лоб". В рамках песочницы - так.
____________
Если гнаться за краткостью, можно вообще выбросить вспомогательную функцию, и брать элементы по селектору атрибута:
document.querySelector('[data-code="' + event.code + '"]');
3) спасибо за анализ кода. Мне это было важно. Приму к сведению)