Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Избегайте фокусировки клика

Автор вопроса: Koala7Ответов: 2

Я работаю над функциональностью кнопки вкладки для своей формы.

Я использую плагин для настройки всех вариантов моей формы, но теперь я застрял в конфликте.

Это код, который я написал для отображения списка выпадающего меню с помощью кнопки tab при выборе.

$styledSelect.focus(function(e) {
  var dropdown = $(this).next('ul');
  dropdown.show();
});

$styledSelect.focusout(function(e) {
  var dropdown = $(this).next('ul');
  dropdown.hide();
});

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

Вы можете увидеть проблему здесь http://codepen.io/Mannaio/pen/tLaup

Как я могу решить эту проблему?

javascriptfocusclickjqueryjquery-focusout

Ответы

Ответ 1 · рейтинг 4 · Scott Murphy

Вы можете настроить обработчик щелчка и фокуса и повторно использовать одну и ту же логику для обоих.

function setFocus(e) {
  e.stopPropagation();
  $('div.select-styled.active').each(function() {
    $(this).removeClass('active').next('ul.select-options').hide();
  });
  $(this).toggleClass('active').next('ul.select-options').toggle();
};

$styledSelect.click(setFocus);

$styledSelect.focus(setFocus);

Обновленный CodePen: http://codepen.io/anon/pen/kcpqd

Ответ 2 · рейтинг 3 · Drazen Bjelovuk

Отработка ответа Burntforest (учитывает, что выпадающие списки не закрываются при выходе из табуляции):

function getFocus(e) {
    e.stopPropagation();
    hideAllLists();
    $(this).toggleClass('active').next('ul.select-options').toggle();
};

function hideAllLists() {
    $('div.select-styled.active').removeClass('active')
                                 .next('ul.select-options').hide();
}

$styledSelect.click(getFocus);
$styledSelect.focus(getFocus);

$(document).keydown(function(e) {
   if (e.keyCode === 9)
       hideAllLists();
});

http://codepen.io/anon/pen/BqEkz

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы