Как мне сфокусировать текстовое поле HTML на iPhone (чтобы клавиатура всплыла)? - PullRequest
24 голосов
/ 11 июня 2009

Я пишу веб-приложение для iPhone и хочу автоматически фокусировать текстовое поле при загрузке страницы, вызывая клавиатуру. Обычный Javascript:

input.focus();

не похоже на работу. Есть идеи?

Ответы [ 7 ]

18 голосов
/ 16 июля 2010

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

6 голосов
/ 01 октября 2013

Редактировать: Следующее больше не работает на iOS - UIWebView разрешил автофокусировку и ссылки на домашний экран, используемые для автофокусировки, но они отключили много версий назад.

Свойство autofocus (см. Ниже) не работает с URL-адреса в Mobile Safari, но работает, если вы:

  1. с использованием UIWebView
  2. используя ссылку на домашний экран

Размер шрифта для ввода должен быть достаточно большим, чтобы избежать двойного нажатия на iOS10 (теперь это окно просмотра всегда масштабируемо) и чтобы размер страницы соответствовал размеру экрана (в противном случае при загрузке страницы вы получаются странные ошибки времени / расы при увеличении, или если прокручиваемое поле иногда не центрируется должным образом).

autofocus: спецификацией HTML5 для этого является свойство автофокуса входного тега . Но iOS игнорирует это, по-видимому, для более чистого пользовательского интерфейса, который не открывает сенсорную клавиатуру при переходе на страницу. Здесь - страница, демонстрирующая свойство автофокуса. До HTML5 вы вызывали element.focus () в событии window.onload. Однако вызовы focus () не поддерживаются в iOS, кроме как во время обработки события onclick.

3 голосов
/ 11 июня 2009

Примечание : этот ответ старый и может не иметь отношения к более новым версиям ...


Вам это не поможет, но последний постер в этой ветке написал, что это ошибка движка webkit.
Я не могу сказать, является ли это проверенной ошибкой или нет ...

Последнее сообщение от Путь назад машины (как оригинал, кажется, не работает):

Я разрабатываю свое приложение на чистом XHTML MP / Ecmascript MP / WCSS. Так использование родной платформы управления браузером API действительно не вариант для мне. Да, поведение, о котором ты говоришь, такое же, как и у меня. Я искал его тема в bugzilla на webkit.org и обнаружил, что это действительно сообщается об ошибке. focus () для текстового поля выделяет элемент, но не предоставляет карат в нем для пользователя, чтобы начать вводить текст. Использование таймера, как упомянуто "peppe@peppe.net", также не помогает.

Такое поведение распространено на разных платформах (s60, iphone, android), которые использовать движок webkit.

Так что на данный момент я не вижу решения этой проблемы.

Надеюсь, это поможет

2 голосов
/ 20 апреля 2011

У меня похожая проблема, только моя проблема в том, что фокус не будет происходить на событии "касания".

http://jsfiddle.net/milosdakic/FNVm5/

Следующий код будет работать в Chrome / Safari и т. Д., Но не будет работать в Mobile Safari. Единственный способ заставить его работать, это сделать событие «кликом», но, учитывая, что код создан для устройства iOS, было бы полезно для него работать с сенсорными событиями.

Кажется, это ошибка в движке Webkit.

1 голос
/ 29 февраля 2016

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

0 голосов
/ 10 февраля 2015

Возможно, немного поздно, но для будущего человека. В нашем веб-приложении, работающем на iOS iPad (6 и более поздних версиях), мы делаем это с заданным интервалом:

startFocusOnTextField: function() {
        this.intervalIDForTextFieldFocus = window.setInterval(function() {
            document.getElementById(page.textInputFieldObj.id).focus();
        }, 150);
    },

Что вызывается при загрузке страницы (мобильная среда jQuery)

0 голосов
/ 13 сентября 2012

Это рабочая среда:

setTimeout(function(){
    input.focus();
},500);//milliseconds
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...