Подтвердить что ты не робот

Как я могу сфокусировать текстовое поле HTML на iPhone (вызывая клавиатуру)?

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

input.focus();

похоже, не работает. Любые идеи?

4b9b3361

Ответ 1

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


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

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

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

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

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

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

Ответ 2

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

Ответ 3

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

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

  • с помощью UIWebView
  • с помощью ссылки на главном экране

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

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

Ответ 4

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

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

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

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

Ответ 5


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

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

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

Ответ 6

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

Ответ 7

Это рабочий процесс:

setTimeout(function(){
    input.focus();
},500);//milliseconds