Как предотвратить действие вкладки, запускаемое стрелками iOS uikeyboard?

У меня есть HTML-форма, и, в частности, на iOS мне нужно запретить пользователю «перемещаться» по входам, когда присутствует модальное окно.

Я заключаю кавычки вокруг «табуляции», потому что на клавиатуре iOS нет стандартной клавиши tab, она использует стрелки «предыдущий/следующий» на панели инструментов над клавиатурой. (см. изображение ниже)

введите здесь описание изображения

К этим ключам не привязаны события DOM, поэтому чтение в e.keyCode и использование e.preventDefault() не являются вариантами. Любые идеи?


person SteamDev    schedule 14.07.2016    source источник
comment
$(document).bind('keydown', ...), mousedown, touchstart? Некоторые из этого события уволены?   -  person spirit    schedule 15.07.2016
comment
@spirit нет, как я уже сказал в посте, эти стрелки не вызывают никаких событий DOM.   -  person SteamDev    schedule 15.07.2016


Ответы (2)


Решение, которое я закончил реализовывать, было примерно следующим:

HTML

<!-- modal content -->
<div class="search-modal">
  <input type="search" id="search-input" />
  <input type="text" onfocus="refocus('search-input')" style="opacity:0;" />
</div>

<!-- main page content -->
<div class="page-body">
  <input type="text" name="fname" />
  <input type="text" name="lname" />
  <input type="email" name="email" />
  <input type="tel" name="phone" />
  <!-- ... -->
</div>

JS

function refocus(id){
  document.getElementById(id).focus();
}

Всякий раз, когда используется стрелка «следующий», невидимый ввод получает фокус. Он немедленно возвращает фокус на исходный ввод; таким образом предотвращая получение фокуса немодальными входными данными.

person SteamDev    schedule 17.07.2016

К сожалению, у меня нет iOS для тестирования. Но я думаю, вы можете попробовать следующее:

  1. отключить все входы, кроме первого.
  2. после того, как пользователь ввел некоторую информацию, и вы ее подтвердите, включите следующий ввод
  3. и так далее.

Немного странно, но может сработать =).

ПС. Только что понял. Вы имели в виду, что при наличии модального режима пользователь может переключаться на ввод «под» модальным?

В этом случае вы должны принудительно поставить focus() на первый элемент вашей модальной формы, чтобы «табуляция» работала в вашей новой форме.

person spirit    schedule 15.07.2016
comment
Это хорошие предложения, спасибо, но я нашел другой обходной путь с меньшими затратами. И да, проблема заключалась в том, что в центре внимания были немодальные поля ввода. - person SteamDev; 17.07.2016
comment
@SteamDev, может быть, ты опубликуешь свой ответ? - person spirit; 17.07.2016