web-dev-qa-db-ja.com

iOS-入力/テキストエリアに手動で焦点を合わせるための回避策

そのため、input/textarea要素に焦点を当てたiOSの問題について、多くのスレッドを見てきました。 ( here および here を参照)iOSでは、これらの要素の1つに手動で焦点を合わせることはできず、素子。

私はクリックをシミュレートし、クリックをトリガーし、すぐにclick()を実行しようとしました...あらゆる種類のもの。

実装しようとしている現在の回避策は次のとおりです。

_$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.5秒でキーボードが表示され、その後、再び消えます。

上記のように他のスレッドを見てきましたが、この回避策を書く方法を理解することはできないようです。

何か案は?

42
germainelol

私も同じような問題を嫌がらせをしています。私の問題は、-webkit-user-select:noneこれを削除し、すべて正常に動作します。これを試してください。

13
Yogesh Jagdale

UIWebViewで、keyboardDisplayRequiresUserActionNOに設定します。

12
Peyman

テストにはiPad Air [iOS 7.0.4]、iPad Mini [iOS 7.1]、jQuery [1.11.3]を使用しました。

.focusイベントは、入力フィールドとテキストエリアの両方で完璧に機能しました。

私がテストした以下のコードを貼り付けています。何か足りない場合はお知らせください。

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();
})
2
Suman Barick

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);
}
0
bendytree