jQuery запретить нажатие клавиатуры, если цель не определена? - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть приложение ruby ​​on rails, где пользователь может перейти к предыдущему или следующему вопросу с помощью клавиатуры. За один раз загружается одна страница, которая содержит ссылку на предыдущую страницу и следующую страницу.

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

Я получил работающую пред / следующую функциональность, но теперь не могу понять, что делать дальше.

$(function() {
   $(document).keyup(function(e) {
    switch(e.keyCode) {
      case 37 :
        var a_href = $(this).find('a.previous_page').attr('href');
        window.location=a_href;
      break;
      case 39 :
        //window.location="/page-link-next";
        var a_href = $(this).find('a.next_page').attr('href');
        window.location=a_href;
      break;
    }
  });
});

1 Ответ

0 голосов
/ 29 апреля 2018

Используйте .length в коллекции jQuery (например, .find), чтобы выяснить, сколько элементов в коллекции.

Еще одна вещь, которую нужно иметь в виду, это то, что var поднимается; наличие двух var s, объявляющих одно и то же имя переменной внутри функции, не совсем корректно. Лучше объявить имя переменной в другом месте (например, вверху) и переназначить, либо использовать что-то отличное от оператора switch, чтобы вы могли использовать const, который имеет область видимости блока и с которой гораздо проще иметь дело:

$(function() {
  $(document).keyup(function(e) {
    const keyCode = e.keyCode;
    if (keyCode === 37) {
      const a = $(this).find('a.previous_page');
      if (a.length === 0) return;
      window.location= a.attr('href');
    } else if (keyCode === 39) {
      const a = $(this).find('a.next_page');
      if (a.length === 0) return;
      window.location= a.attr('href');
    }
  });
});

Лучше не использовать switch, если вы можете избежать этого - это излишне многословно и подвержено ошибкам.

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