Как пропустить элементы при табуляции без использования tabindex?

Есть ли хороший способ в обработчике javascript onfocus(), чтобы переместить фокус на следующий элемент в порядке вкладок, без необходимости вручную вводить идентификатор элемента, который должен быть следующим?

Я построил сборщик дат в HTML в Django/jQuery. Это редактирование строки, за которым следует значок календаря, который открывает календарь. Я хочу иметь возможность перейти от строки редактирования к следующему входу, пропустив ссылку на значок календаря. Я имею в виду, что это будет обобщенный виджет, поэтому я не могу жестко закодировать идентификатор того, что будет дальше, и вызвать.focus(). Я знаю, что мог бы установить атрибуты tabindex на все, но это более ручное, чем я хотел бы. Кроме того, iirc, это не помешает ему сфокусироваться, просто поместит его в конец последовательности табуляции.

7 ответов

Установите tabindex = "-1" для этого элемента управления, и браузер пропустит этот элемент управления с вкладками.

Или же:

$("#your-calendar-icon").focus(function() {
    $(somethingElse).trigger("focus");
});

Может быть:

$("#your-calendar-icon").focus(function() {
  $(this).trigger("blur");
);

Как говорит @thetacom, вы можете просто использовать элемент другого типа, который не получает фокуса. Если вы все еще хотите сохранить некоторые функции вкладки, вы можете попробовать SkipOnTab.

SkipOnTab: плагин jQuery для освобождения выбранных полей формы от последовательности вкладок вперед.

Просто добавь data-skip-on-tab="true" к значку выбора даты (или другим элементам / контейнерам), который вы хотите пропустить. Вы по-прежнему можете щелкнуть, чтобы активировать средство выбора даты или вернуться назад, используя Shift- Tab и использовать клавишу ввода.

Посмотрите простую демонстрацию и демонстрацию бизнес-кейса.

Если это всегда будет вход после календаря, то почему бы и нет:

$('#your-calendar-icon').focus( function() {
  $(this).next('input').focus();
} );

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

Используйте div вокруг иконки календаря вместо ссылки. Затем прикрепите события календаря к div. По умолчанию div не будет табуляцией.

Другие вопросы по тегам