iOS - 手动关注输入/文本区域的解决方法

时间:2015-06-10 09:22:08

标签: javascript jquery ios

所以我看到了很多关于iOS问题的线索,专注于输入/ textarea元素。 (请参阅herehere)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')可以解决textarea的文本没有问题,但.focus()在iOS上不起作用。我已经在Android设备上测试了它,它工作正常,但在iOS上它只是没有调出键盘。有时它会开始调高键盘半秒钟然后再次消失。

我已经看过上面提到的其他线程了,我似乎无法弄清楚如何为此编写解决方法。

有什么想法吗?

5 个答案:

答案 0 :(得分:12)

我也骚扰同样的问题。 我的问题通过简单的一个css属性解决,-webkit-user-select:none我删除了这个并且一切正常。 试试这个。

答案 1 :(得分:12)

On your UIWebView, set keyboardDisplayRequiresUserAction to NO.

答案 2 :(得分:2)

我使用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();
})

答案 3 :(得分:0)

来自thedyrt/cordova-plugin-wkwebview-enginekeyboardDisplayRequiresUserAction = NO的WKWebView版本:

#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);
}

答案 4 :(得分:0)

这似乎仅在iOS12上发生。 .Focus在iOS11&13中工作正常