KeyBoard Navigation для меню с помощью jquery - PullRequest
3 голосов
/ 11 сентября 2009

Я пытаюсь добавить навигацию с помощью клавиатуры в меню (на основе ul li ), я связал событие нажатия клавиши с меню (или я должен привязать нажатие клавиши к документу?)

используемая функция обработчика приведена ниже

 KeyDown: function(e) {        

    var toFocus = false;


                  if (e.keyCode == 38) {
         toFocus = $((e.target/* li */).next()[0]);
      }
                          if (e.keyCode == 40) {
         toFocus = $((e.target).next()[1]);
      }
    if (toFocus) {
        $(e.target).attr('tabIndex', '-1');
        $(toFocus).attr('tabIndex', '0');
        toFocus.focus();
        return false;
        }
        }

здесь я получаю e.target в виде HTML вместо li?

Можете ли вы предложить другой способ добавить навигацию с помощью клавиатуры?

Ответы [ 3 ]

1 голос
/ 11 сентября 2009

Попробуйте использовать пользовательский атрибут, чтобы удерживать табид вверх и вниз.

...KeyDown: function(e) {
    var Direction;
    if (e.keyCode == 38)
         Direction = "toUp";
    else Direction = "toDown";

    var Focus = $("li[tabid=\""$(e.target.id).attr(Direction)"\"]");
    Focus.focus();
}

---

<li ... tabid="1" toUp="-1" toDown= "2" />
<li ... tabid="2" toUp= "1" toDown= "3" />
<li ... tabid="3" toUp= "2" toDown= "4" />
<li ... tabid="4" toUp= "3" toDown="-1" />

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

Надеюсь, что помогает

1 голос
/ 11 сентября 2009

Мне просто интересно, если вместо того, чтобы сделать это самостоятельно, почему бы не использовать уже существующий плагин?

jQuery Keyboard Navigation

демо страница здесь

моя демонстрация : просто добавьте демонстрационную страницу примера

0 голосов
/ 11 апреля 2016

HTML

<body>
    <input type="text" id="target-box" >
    <ul class="list">
        <li class="selected">Hello</li>
        <li>World</li>
    </ul>
</body>

JQuery

$(document).on('focus','#target-box', function() {
    var target_box = $(this);

    $(document).on('keyup', function(e) {

        if(e.which == 38){ // up arrow
            var selected_item = $('.selected');
            if(typeof selected_item.prev()[0] !== 'undefined') {
                selected_item.prev().addClass('selected');
                selected_item.removeClass('selected');
            }
        } else if (e.which == 40) { // down arrow
            var selected_item = $('.selected');
            if (typeof selected_item.next()[0] !== 'undefined') {
                selected_item.next().addClass('selected');
                selected_item.removeClass('selected');
            }
        }

        if (e.keyCode == 13) { // enter
            target_box.val($('.selected').html());
        }
    });
});

CSS

.selected {
    width : 50px;
    background-color: gray;
}
...