Как я должен увеличить количество операторов

#javascript #html #arrays #dom-events #keyboard-events

Вопрос:

 function ShortCutKey(elemKey, keyCode, func) {
    var elemId = document.getElementById(elemKey);
    function RunFuncShorcut(enKey, numkeys) {
        if (numkeys > 1) {
            if (enKey.code == keyCode[0] amp;amp; enKey.code == keyCode[1]) func();
        } else{
            if (enKey.code == keyCode[0]) func();
        }
    }
    if (Array.isArray(keyCode)){
        if (keyCode.length > 1) {
            elemKey.addEventListener("keyup", function() {
                RunFuncShorcut(keyCode, 2);
            });
        } else{
            elemKey.addEventListener("keyup", function() {
                RunFuncShorcut(keyCode, 1);
            });
        }
    }
    else{
        throw "2nd Argument must be an Array";
    } 
}
 

Он просто ограничен двумя клавишами, что означает только комбинацию из двух клавиш. Мне нужна множественная комбинация с меньшим количеством кода… Но я все еще не знаю, как это сделать!

Ответ №1:

Вы можете использовать каждый

every() Метод проверяет, все ли элементы массива проходят тест, реализованный предоставленной функцией. Он возвращает логическое значение.

 function ShortCutKey(elemKey, keyCodes, func) {
    const elemId = document.getElementById(elemKey);
    function RunFuncShorcut(enKey) {
        if (keyCodes.every(keyCode => keyCode === enKey.code)) func();
    }
    if (Array.isArray(keyCodes)){
        elemKey.addEventListener("keyup", function() {
            RunFuncShorcut(keyCodes);
        });
    }
    else{
        throw "2nd Argument must be an Array";
    } 
} 

Комментарии:

1. «Я хочу использовать его каждый раз, ShortCutKey("SomeElem", ["Slash"], focus); но он не работает так, как работает, когда загружается веб-страница. Я обычно console.log() проверял, когда он вызывается, но он вызывается без функции keyup

2. @ShreyBhangale Это похоже на другую, совершенно не связанную проблему. Я ответил: «Как я должен увеличить количество операторов amp;amp; в соответствии с аргументом массива, передаваемым в функции?»

3. Ну… что это не несвязанная проблема, которую вы видите…. Когда я нажимаю на определенный элемент, я буду пробовать любую комбинацию, такую как ctrl , или «ctrl» shift , или ctrl shift alt , , поэтому количество кодов клавиш увеличивается, поэтому в if инструкции для этого потребуется определенный ключ amp;amp; определенный ключ amp;amp; определенный ключ , как это