Остановить прокрутку страницы при перехвате нажатий клавиш, таких как пробел и стрелки - PullRequest
7 голосов
/ 02 октября 2010

Я использую JavaScript и Prototype и ловлю нажатия клавиш от пользователя. Я успешно ловлю возврат, пробел и стрелки с кодом, подобным этому:

Event.observe(window, "keyup", function(e) {
  switch (e.keyCode) {
    case Event.KEY_RETURN:
    case Event.KEY_RIGHT:
    case 32:  // space
      // do something
      break;
  }
});

Моя проблема в том, что пробелы и стрелки продолжают прокручивать страницу. Есть ли способ не дать им прокрутить страницу?

Ответы [ 4 ]

8 голосов
/ 08 октября 2012

Используйте e.preventDefault(), чтобы остановить поведение браузера по умолчанию

6 голосов
/ 02 октября 2010

Слишком поздно в keyup, чтобы предотвратить действие браузера по умолчанию. Вместо этого сделайте это в событии keydown и используйте метод Event.stop прототипа:

Event.observe(document, "keydown", function(e) {
  switch (e.keyCode) {
    case Event.KEY_RETURN:
    case Event.KEY_RIGHT:
    case 32:  // space
      // do something
      Event.stop(e);
      break;
  }
});
5 голосов
/ 02 октября 2010

С Прототипная документация :

Event.stop (событие)
Останавливает распространение события и предотвращает его действие по умолчанию от запуска в конце концов.

Поэтому добавление Event.stop(e); до break; должно решить вашу проблему.

Кроме того, вы должны делать это для события keydown, потому что keyup слишком поздно.

0 голосов
/ 07 февраля 2013

e.preventDefault () работает в Chrome.

...