IOS Safari HTML-форма следующая/предыдущая кнопка - как они работают?

Отказ от ответственности: я использую JQuery Mobile.

У меня есть куча страниц с разными формами, но некоторые из них, похоже, проявляют различное поведение при нажатии следующих/предыдущих кнопок.

The next/previous buttons on iOS7 keyboard

Все формы настроены с индексом табуляции.

Форма 1 работает отлично, за исключением того, что она пропускает переключатели JQuery Mobile и переключатели, что не является проблемой, так как они немного отличаются.

Форма 2, элемент с tabindex="0" имеет фокус, установленный для него с помощью $("#myElement").focus();, а затем следующая кнопка отключена, а нажатие предыдущей кнопки переходит к нижней части формы, то есть следующий порядок /1, 2, 0.

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

Форма 4 работает нормально, кроме последнего поля выбора, кажется, игнорируется. Затем tabindex переходит к некоторым элементам привязки на странице, прежде чем переходить к переключателям переключения. Форма 5 имеет такое же поведение, как и форма 4, снова игнорируется последнее поле выбора в форме.

Я продолжу расследовать это и выпустить скрипку, но кто-нибудь испытал такие проблемы или получил некоторое представление о том, как они должны работать?

Ответ 1

ОК, все это мои ошибки, но это может помочь кому-то, поэтому здесь идет.

Следующий/предыдущий порядок, по-видимому, напрямую связан с атрибутом tabindex без привязки строк.

Однако к моей ошибке tabindex начинается с 1 не 0. http://www.w3schools.com/tags/att_global_tabindex.asp. Итак, для формы 2 она начиналась с 1, затем 2, затем 0.

Я использовал knockoutjs для привязки атрибута tabindex к $index() элемента наблюдаемогоArray, который представлял каждое поле и значение поля, что затрудняло обнаружение ошибки. Поэтому мне пришлось изменить его на $index() + 1.

Для переключателей индекс был выбран из набора опций, а не для родителя, поэтому мне пришлось использовать $parentContext.index() + 1 для них (см. здесь: fooobar.com/questions/70707/...).

Попытка того же подхода для переключателей переворота ничего не делает.

Полностью беспорядочная форма заключалась в том, что в DOM существовала еще одна форма, которая имела атрибуты tabindex, заданные для аналогичного набора значений, поэтому она поочередно перемещается между двумя формами. Самое легкое решение для меня заключалось в том, чтобы скрыть существующую форму, см. Здесь: fooobar.com/questions/396441/....

Общность между формой 4 и формой 5 также заключалась в том, что у них был тот же tabindex (6), однако это была красная селедка. Все еще исследуя, почему последнее поле выбора пропускается в Chrome, однако на iOS Safari он работает так, как ожидалось, поэтому проблемы решены.

Ответ 2

По крайней мере, для Firefox/Chrome, вы можете использовать mozactionhint:

<input name="foo" tabindex="1" mozactionhint="Next"> // will go to next: "bar"
<input name="bar" tabindex="2" mozactionhint="Next"> // will submit the form
<input type="submit" tabindex="3">Submit</input>