На этом шаге мы рассмотрим сценарий обработки клавиш со стрелками.
Для определения нажатой клавиши можно использовать атрибут keyCode объекта события. Это позволит нам поджидать нажатия клавиш с кодами 38 и 40, соответствующих клавишам со стрелками вверх и вниз, и реагировать подобающим образом:
  $('#search-text').attr('autocomplete','off').keyup(function(event) {
    if (event.keyCode > 40 || event.keyCode == 8) {
      // Клавиши с кодами 40 и ниже являются специальными клавишами
      // (enter, клавиши со стрелками, escape и другие).
      // Клавиша с кодом 8 - это клавиша забоя (backspace).
      $.ajax({
        'url': '../cgi-bin/autocomplete.php',
        'data': {'search-text': $('#search-text').val()},
        'dataType': 'json',
        'type': 'GET',
        'success': function(data) {
          if (data.length) {
            $autocomplete.empty();
            $.each(data, function(index, term) {
              $('<li></li>').text(term)
              .appendTo($autocomplete)
              .mouseover(function() {
                     setSelectedItem(index);
              })  
              .click(function() {
                $('#search-text').val(term);
                $autocomplete.hide();
              });
            });
            setSelectedItem(0);
          }
          else {
            setSelectedItem(null);
          }
        }
      });
    }
    else if (event.keyCode == 38 && 
                                 selectedItem !== null) {
      // Нажата клавиша со стрелкой вверх.
      setSelectedItem(selectedItem - 1);
      event.preventDefault();
    }
    else if (event.keyCode == 40 && 
                                 selectedItem !== null) {
      // Нажата клавиша со стрелкой вниз.
      setSelectedItem(selectedItem + 1);
      event.preventDefault();
    }
 });
Теперь наш обработчик события keyup проверяет значение свойства keyCode, определяя код нажатой клавиши, и выполняет соответствующие действия. Запрос AJAX теперь не посылается, если была нажата специальная клавиша, такая как клавиша со стрелкой или escape. Если было определено нажатие клавиши со стрелкой и при этом в текущий момент список вариантов отображается, обработчик изменяет индекс выбранного элемента на 1 в соответствующем направлении. Так как функция setSelectedItem() предусматривает ограничение значений диапазоном допустимых индексов в списке, нам можно не беспокоиться о том, что пользователь выйдет за пределы списка.
Рис.1. Обработка клавиш со стрелками
На следующем шаге мы рассмотрим вставку варианта в поле.