Как я могу исключить формы/вводы из функции, использующей команды клавиатуры?

Я использую плагин jQuery scrollTo вместе с событиями нажатия клавиш для горизонтальной прокрутки окна с помощью клавиш J и K. Это работает довольно хорошо, однако у меня есть входные данные формы на странице, поэтому я хотел бы отключить поведение прокрутки, когда входные данные сфокусированы. Мой код ниже:

// scroll left/right
$(document).keydown(function (evt) {
  if (evt.keyCode == 75) { 
    evt.preventDefault(); 
    $.scrollTo( '+=201px', '', { axis:'x' } ); 
  } else if (evt.keyCode == 74) { 
    evt.preventDefault();
    $.scrollTo( '-=201px', '', { axis:'x' } );
  }
});

person Ben L    schedule 11.11.2010    source источник


Ответы (2)


Вы можете проверить что-то вроде

$(document).keydown(function (evt) {
var element = $(evt.target);
if (!element.is('input,textarea')) {
  if (evt.keyCode == 75) { 
    evt.preventDefault(); 
    $.scrollTo( '+=201px', '', { axis:'x' } ); 
  } else if (evt.keyCode == 74) { 
    evt.preventDefault();
    $.scrollTo( '-=201px', '', { axis:'x' } );
  }
  }
});
person Kai    schedule 11.11.2010

Вы можете получить доступ к сфокусированному элементу с помощью свойства evt.target. Поэтому следующая модификация должна выполнить эту работу:

$(document).keydown(function(evt){
  if(!$(evt.target).is("input")){
    if (evt.keyCode == 75) { 
        evt.preventDefault(); 
        $.scrollTo( '+=201px', '', { axis:'x' } ); 
    } else if (evt.keyCode == 74) { 
       evt.preventDefault();
       $.scrollTo( '-=201px', '', { axis:'x' } );
    }
 }
})
person Simon    schedule 11.11.2010