Как предотвратить прокрутку клавишами со стрелками, а НЕ мышью? - PullRequest
34 голосов
/ 29 июня 2009

Так как я использую jQuery, любое решение через это тоже будет работать. В идеале я хотел бы знать и то и другое.

У меня уже есть клавиши со стрелками, связанные с другой функцией на моей странице (с использованием jQuery), но их использование приводит к прокрутке страницы в дополнение к этому, вызывает у меня проблемы.

Возможно, я знал это когда-то, но уже не помню.

Ответы [ 3 ]

78 голосов
/ 29 июня 2009

Добавление обработчика нажатий клавиш на уровне документа делает свое дело!

var ar=new Array(33,34,35,36,37,38,39,40);

$(document).keydown(function(e) {
     var key = e.which;
      //console.log(key);
      //if(key==35 || key == 36 || key == 37 || key == 39)
      if($.inArray(key,ar) > -1) {
          e.preventDefault();
          return false;
      }
      return true;
});
2 голосов
/ 11 сентября 2014

При некоторых обстоятельствах, например. когда у вас нет элемента, на который вы фокусируете, просто какая-то область, которую вы должны были щелкнуть, вы можете не иметь слишком много контроля над обработчиком, и предотвращение события на глобальном уровне может быть в лучшем случае немного ненадежным (как я нашел трудный путь).

Самым простым решением в этих случаях является привязка по нажатию даже кнопки управления и фокусировка на пустом элементе ввода, который вы расположите на -9000 пикселей слева.

После этого вы можете надежно заблокировать событие с помощью нажатия клавиши, и вам также не придется беспокоиться о блокировке поведения по умолчанию или других глобальных прослушивателей, поскольку поведение по умолчанию для элемента ввода будет просто перемещать курсор влево и вправо.

1 голос
/ 01 августа 2014

Если вы добавите обработчик нажатия клавиш на уровне документа, это предотвратит обычную прокрутку на странице в любое время, не только когда ваш элемент находится в фокусе, это может быть нежелательным эффектом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...