所以我看到了很多关于iOS问题的线索,专注于输入/ textarea元素。 (请参阅here和here)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上它只是没有调出键盘。有时它会开始调高键盘半秒钟然后再次消失。
我已经看过上面提到的其他线程了,我似乎无法弄清楚如何为此编写解决方法。
有什么想法吗?
答案 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-engine的keyboardDisplayRequiresUserAction = 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中工作正常