Как пропустить элементы при вкладке без использования tabindex? - PullRequest
15 голосов
/ 05 января 2009

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

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

Ответы [ 7 ]

27 голосов
/ 29 сентября 2009

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

2 голосов
/ 05 января 2009

или

$("#your-calendar-icon").focus(function() {
    $(somethingElse).trigger("focus");
});
2 голосов
/ 05 января 2009
2 голосов
/ 05 января 2009

Может быть:

$("#your-calendar-icon").focus(function() {
  $(this).trigger("blur");
);
0 голосов
/ 12 февраля 2012

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

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

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

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

0 голосов
/ 05 января 2009

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

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

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

0 голосов
/ 05 января 2009

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

...