IvanIlyasov
@IvanIlyasov
Познаю мир

Как переключить элементы списка (сделать навигацию) с помощью стрелок клавиатуры на Jquery (подгрузка через ajax)?

Скопировал и видеоизменил такой скриптик:
https://jsfiddle.net/dvwdboh0/3/

Дано:
Список (ul > li), который подгружается через ajax (человек вводит запрос и появляются элементы, live поиск)
html
<div id="ba_ajax_result">
  <ul id="ba_ajax_result_product">
    <li class="title_product">Товаров (3/3)</li>
    <li class="item_product ">
      <a href="//google.ru"><span class="name_product">Гугл</span></a>
    </li>
    <li class="item_product ">
      <a href="//ya.ru"><span class="name_product">Яндекс</span></a>
    </li>
    <li class="item_product ">
      <a href="//ok.ru"><span class="name_product">Одноклассники</span></a>
    </li>
    <li>
      <a id="ba_prev_product" class="ba_prev" href="javascript:void(0)" rev="1" onclick="prevProduct()">&lt;&lt;&nbsp;Назад</a>
      <a id="ba_next_product" class="ba_next" rev="1" href="javascript:void(0)" onclick="nextProduct()">Вперед&nbsp;&gt;&gt;</a>
    </li>
  </ul>
</div>


js
$(document).ready(function() {
  $('#ba_ajax_result_product li.item_product:nth-of-type(2)').addClass('active');
  $(window).keyup(function(e) {
    var $current = $('#ba_ajax_result_product li.item_product.active');
    var $next;
    if (e.keyCode == 38)
      $next = $current.prev('li.item_product');
    if (e.keyCode == 40)
      $next = $current.next('li.item_product');
    if (e.keyCode == 13) {
      $('#ba_ajax_result_product li.item_product > a').click();
    }
    if ($next.length > 0) {
      $('#ba_ajax_result_product li.item_product').removeClass('active');
      $next.addClass('active');
    }
  });
});


css

.active {
  background: yellow;
  font-weight: bold;
}


Задача:
  1. Сделать так, чтобы работало с динамически подгружающимися элементами (ajax)
  2. Назначить первому элементу списка ссылок класс active
  3. Переключать элементы нажатием вверх/вниз на клавиатуре
  4. При нажатии на Enter кликнуть по ссылке выделенного элемента


Часть уже сделана, вопросы по 1-ому и 4-ому пункту задачи. (Возможно, во 2-ом пункте тоже как-то по-другому сделать можно)

Помогите плиз!
  • Вопрос задан
  • 1036 просмотров
Решения вопроса 1
lazalu68
@lazalu68
Salmon
В общем небольшие итоги переписки в комментариях: при попытке по нажатию клавиши enter открывать ссылку с помощью $().click генерируется untrusted событие, поэтому ссылка не открывается. Зато нажатие на enter по дефолту открывает ссылку если она в фокусе, это можно сделать с помощью $().focus. А т.к. никакого кеша в помине нет, то четвертый пункт ("Сделать так, чтобы работало с динамически подгружающимися элементами") выполняется автоматически.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы