2015-06-10 4 views
38

इसलिए मैंने इनपुट/टेक्स्टरेरा तत्व पर ध्यान केंद्रित करने के साथ आईओएस मुद्दे के बारे में बहुत सारे धागे देखे हैं। (here और here देखें) ऐसा लगता है कि आईओएस आपको इन तत्वों में से किसी एक पर मैन्युअल रूप से ध्यान केंद्रित नहीं करने देगा, और तत्व पर ध्यान केंद्रित करने के लिए इसे वास्तविक टैप/क्लिक करने की आवश्यकता है।आईओएस - मैन्युअल रूप से इनपुट/टेक्स्टरेरा पर ध्यान केंद्रित करने के लिए वर्कअराउंड

मैंने एक क्लिक को सिमुलेट करने का प्रयास किया है, एक क्लिक ट्रिगर कर रहा है, बस क्लिक() सीधे ... सभी प्रकार की चीजें कर रहा हूं।

यहाँ मेरे वर्तमान workaround है कि मैं लागू करने के लिए कोशिश कर रहा हूँ है:

$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() आईओएस पर काम नहीं करता है। मैंने इसे एंड्रॉइड डिवाइस पर परीक्षण किया है और यह ठीक काम करता है, लेकिन आईओएस पर यह कीबोर्ड को नहीं लाता है। कभी-कभी यह कीबोर्ड को आधे सेकेंड तक लेना शुरू कर देगा और फिर गायब हो जाएगा।

मैंने उपरोक्त वर्णित अन्य धागे को देखा है, और मुझे लगता है कि इसके लिए एक वर्कअराउंड कैसे लिखना है।

कोई विचार?

+0

आप एक क्लिक (गति प्रदान करने की कोशिश की है के बजाय()? मुझे बिना किसी समस्या के किसी भी डिवाइस पर काम करना चाहिए। '' '$ (यह) .next ('इनपुट')। क्लिक करें();' '' –

+0

@EmanueleParisio हाँ मैंने इसके बजाय '.click()' डालने का प्रयास किया है। – germainelol

+0

हम इसके लिए एक काम ढूंढ सकते हैं, लेकिन क्या मैं पूछ सकता हूं, आप मूल्य निर्धारित करने के बजाय प्रोग्रामिंग के बजाय कुछ इनपुट क्यों केंद्रित करना चाहेंगे? – ProllyGeek

उत्तर

2

मैंने अपने परीक्षण के लिए आईपैड एयर [आईओएस 7.0.4], आईपैड मिनी [आईओएस 7.1] और jQuery [1.11.3] का उपयोग किया।

। फ़ोकस ईवेंट इनपुट और टेक्स्टरेरा फ़ील्ड दोनों में मेरे लिए पूरी तरह से काम करता है।

मैं नीचे दिए गए कोड को चिपका रहा हूं जिसके साथ मैंने परीक्षण किया था। अगर मुझे कुछ याद आ रहा है तो कृपया मुझे बताएं।

क्या यह आईओएस/jQuery के पिछले संस्करण के लिए है?

मेरे एचटीएमएल,

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

मेरे क्वेरी,

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

मुझे खेद है लेकिन यह काम नहीं करता है, यह काफी ऊपर है जो मैंने ऊपर लिखा है। यदि आप पोस्ट किए गए संबंधित प्रश्नों को देखते हैं तो आप इसके और उदाहरण देख सकते हैं। – germainelol

+0

@germainelol, हाँ, मैंने देखा ... इसके बारे में खेद है ... लेकिन क्या मैं आपके आईओएस संस्करण को जान सकता हूं? –

+0

मैं नवीनतम संस्करण का उपयोग कर रहा हूं, लेकिन जहां तक ​​मुझे पता है कि यह बग काफी समय से आसपास रहा है। – germainelol

12

मैं भी इस तरह इस मुद्दे को एक ही परेशान किया गया था। मेरी समस्या सरल एक सीएसएस संपत्ति द्वारा हल की गई है जो -webkit-user-select:none है, मैंने इसे फिर से बनाया और सभी ठीक काम करते हैं। इसे आज़माएं।

+0

आप इसके साथ क्या बदलेंगे? मैंने मैन्युअल रूप से इस विशेषता का उपयोग नहीं किया है, तो आप '-webkit-user-select' को' क्या सेट करेंगे? – germainelol

+0

-webkit-user-select संपत्ति आईओएस डिवाइस में समस्या बनाता है। इससे टेक्स्टबॉक्स का अप्रत्याशित व्यवहार होता है, जैसे कि फ़ोकस सही तरीके से नहीं मिल रहा है, कुछ बार आप टेक्स्टबॉक्स में टाइप वर्णों को देखने में असमर्थ होते हैं, और भूल जाते हैं कि आपके पास तब आपके सीएसएस में नहीं है। –

+1

हाँ, मुझे संपत्ति के बारे में पता है, लेकिन जैसा कि मैंने कहा है कि मैंने इस सीएसएस में कहीं भी इस संपत्ति को नहीं बदला है। मैंने सोचा था कि आपका मतलब था कि इसे 'टेक्स्ट' में बदलना या ऐसा कुछ ठीक कर देगा। – germainelol

12

अपने UIWebView पर, keyboardDisplayRequiresUserAction से NO पर सेट करें।

+15

किसी भी अन्य कॉर्डोवा या फोनगैप का उपयोग करके, config.xml में निम्नलिखित प्राथमिकता जोड़ें "<वरीयता नाम = "KeyboardDisplayRequiresUserAction" value = "false" /> " – Luddig

+0

@ लुडिग आखिरकार ... धन्यवाद! – greaterKing

+0

यह अब WkWebView के साथ काम नहीं करता है :(https://bugs.webkit.org/show_bug.cgi?id=142757#c2 –

0

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); 
} 
संबंधित मुद्दे