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

IOS - Временное решение для ручной фокусировки на входном/текстовом поле

Итак, я видел много потоков о проблеме iOS, сосредоточившись на элементе input/textarea. (См. здесь и здесь). Кажется, что iOS не позволит вам вручную сосредоточиться на одном из этих элементов, и требует, чтобы он был подлинным нажатием/щелчком, чтобы сфокусироваться на элементе.

Я попытался имитировать щелчок, нажав кнопку мыши, просто нажав() сразу... всевозможные вещи.

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

$scope.gotoElement = function(eID) {
    // call $anchorScroll()
    $scope.smoothScrollTo(eID).then(function() {
        clickElement('#textarea');
    });          
}

function clickElement(e) {
  $(e).on('touchstart', function() {
    //$(e).val('touchstart');
    $(e).focus();
  });

  $(e).trigger('touchstart');
}

Вам не нужно беспокоиться о функции прокрутки, я знаю, что это работает, и я достаточно проверил это. Прокомментированный $(e).val('touchstart') работает без проблем для изменения текста текстового поля, но .focus() не работает в iOS. Я тестировал это на устройстве Android, и он отлично работает, но на iOS он просто не поднимает клавиатуру. Иногда он начинает поднимать клавиатуру на полсекунды, а затем снова исчезает.

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

Любые идеи?

4b9b3361

Ответ 1

Меня тоже преследовали такие же проблемы. моя проблема решена простым одним css-свойством, которое -webkit-user-select:none Я повторно решил это, и все работает отлично. попробуйте это.

Ответ 2

На UIWebView установите keyboardDisplayRequiresUserAction на NO.

Ответ 3

Я использовал iPad Air [iOS 7.0.4], iPad Mini [iOS 7.1] и jQuery [1.11.3] для моего теста.

Событие .focus отлично работало как для полей ввода, так и для textarea.

Я вставляю код ниже, с которым я тестировал. Пожалуйста, дайте мне знать, если я ничего не пропущу.

Это для какой-то предыдущей версии iOS/jQuery?

Мой HTML,

<body>
    <!--<input id="in" type="text"/>-->
    <textarea id="in"></textarea>
    <button id="btn">Add Focus</button>
</body>

Мой запрос,

$('#btn').click(function(){
    $('#in').focus();
})

Ответ 4

Версия WKWebView keyboardDisplayRequiresUserAction = NO из thedyrt/cordova-plugin-wkwebview-engine:

#import <objc/runtime.h>

- (void) viewDidLoad {
    ...

    SEL sel = sel_getUid("_startAssistingNode:userIsInteracting:blurPreviousNode:userObject:");
    Class WKContentView = NSClassFromString(@"WKContentView");
    Method method = class_getInstanceMethod(WKContentView, sel);
    IMP originalImp = method_getImplementation(method);
    IMP imp = imp_implementationWithBlock(^void(id me, void* arg0, BOOL arg1, BOOL arg2, id arg3) {
        ((void (*)(id, SEL, void*, BOOL, BOOL, id))originalImp)(me, sel, arg0, TRUE, arg2, arg3);
    });
    method_setImplementation(method, imp);
}