Добавить событие нажатия клавиши в классы без JQuery

Приведенный ниже код подключает обработчики событий для кликов, но не работает для событий клавиатуры. Мне нужны не только document.keypress, но и определенные элементы класса для событий клавиатуры. Итак, у меня есть «тест», который отлично работает для щелчков мыши, но не для каких-либо событий клавиатуры.

  function test(className, fnCall, eventToApply){
    if(typeof document.getElementById('x').getElementsByClassName(className) !='undefined') {
                    var els = document.getElementById('x').getElementsByClassName(className);
                    for(var i = 0; i < els.length; i++) {
                        if(els[i].addEventListener) { //Undefined for keypress events
                          els[i].addEventListener(eventName,  function(e) { fnCall(e); }); }
                        else {  //Hardcode for testing
                           els[i].onclick = function(e) { fnCall(e); };     
                            els[i].onkeypress = function(e) { fnCall(e); } //doesn't work!
                        }
                    }

Однако документ onkeypress работает, но я не могу настроить обработчики отдельных элементов для готового документа или самого нажатия клавиши.

document.addEventListener('keypress', function(event){
                   //This works, but setting up events for each class type element doesn't work for keypress 
        })

Другими словами, есть ли эквивалент для выполнения нижеприведенного без использования JQuery:

 document.addEventListener('keypress', function(event){
       //This works in Jquery
        $('.customClass-'+ event.keycode).click(); 
  });



document.addEventListener('keypress', function(event){
 //This doesn't register, says undefined for any event or attachEvenHandler/attachEvent    
 test('.class'+event.keycode, myFunction() , 'keypress');

 });

person Anonymous    schedule 20.03.2016    source источник


Ответы (1)


Вы можете использовать это

document.addEventListener('keypress', function(event){
    var elements = document.getElementsByClassName("customClass-" + event.keycode);
    for (var i = 0; i < elements.length; i++) {
        elements[i].click();
    }
});

w3school документы

person Ance    schedule 20.03.2016
comment
Хотя технически это может дать ответ на вопрос, вы можете указать некоторый контекст, почему это решает проблему. - person drneel; 21.03.2016