2012-10-29 19 views
11

मैं आईओएस पर समस्याएं आ रही हूँ के बाद iOS पर एचटीएमएल इनपुट फ़ील्ड में लिखें नहीं कर सकता और मैं इसके लिए एक बेला ऊपर डाल दिया है:दो बार क्लिक करने

http://jsfiddle.net/Hk56Q/

एक घटना श्रोता जोड़ा जाता है किसी भी स्पर्श घटना के लिए दस्तावेज़ (touchstart/touchmove/touchend), तो जैसे:

function onTouch(e){}; 
document.addEventListener('touchstart', onTouch, false); 

कि iOS पर निम्नलिखित व्यवहार होने इनपुट फ़ील्ड में परिणाम:

  • प्रथम स्पर्श: इनपुट ध्यान केंद्रित हो जाता है और उपयोगकर्ता (ध्यान देने के साथ मैदान पर पहले से ही जगह में) यह
  • बाद अंतिम रूप में सही ढंग से लिख सकते हैं: टाइपिंग अब

मैं हो रही हैं, काम नहीं करता है और आईपैड 5, 5.1 और 6, आईपैड और आईफोन (सिमुलेटर और वास्तविक डिवाइस) दोनों पर इस मुद्दे का परीक्षण।

केवल ठीक इनपुट फ़ील्ड सही व्यवहार को बहाल करने की घटना श्रोता को हटाने के किया जा रहा है (या वास्तव में श्रोता सब पर जोड़ने कभी नहीं करने के लिए):

document.removeEventListener('touchstart', onTouch); 

मैंने यह भी देखा एक से अधिक हैं कि पृष्ठ पर iframes, और उनमें से एक श्रोता को अपने दस्तावेज़ में जोड़ता है, यह अन्य iframe के इनपुट फ़ील्ड को तोड़ देता है।

बेवकूफ मेरे एंड्रॉइड फोन पर सही ढंग से व्यवहार करता है।

कोई विचार यह क्यों हो रहा है? या आईओएस पर इनपुट तोड़ने वाले स्थान पर टच इवेंट्स के लिए ग्लोबल कस्टम इवेंट हैंडलर कैसे हैं?

+1

हमें फास्टक्लिक के साथ इस समस्या का सामना करना पड़ा है और यह [सार्वजनिक रूप से ट्रैक किया गया है] (https://github.com/ftlabs/fastclick/issues/51)। मैंने आपके परीक्षण मामले में ऐप्पल के साथ एक [बग रिपोर्ट] (http://openradar.appspot.com/radar?id=2527401) दायर किया है। –

+0

अरे, हाँ यह निश्चित रूप से एक सफारी आईओएस बग है, अच्छी नौकरी इसकी रिपोर्टिंग। मुझे अभी भी आश्चर्य है कि इस मुद्दे को इतनी देर तक कैसे ध्यान दिया गया था .. – BFil

+0

मुझे ज़ूम इन/आउट द्वारा आईफ्रेम विंडो का आकार बदलने पर भी इस बग का सामना करना पड़ा। –

उत्तर

0

jQuery मोबाइल 1.2.0 होना चाहिए कि तुम क्या जरूरत है

साबित करो! बॉक्स को टिक से पहले:

PROVE(before)

बॉक्स को टिक के बाद:

After ticking

9

यहाँ एक समाधान है। वापस नोड के लिए खिड़की पर ध्यान केंद्रित करें और उसके बाद, एक टाइमआउट में:

function fixIpadTouch(node){ 
    node.ontouchend=function(e){ 
     if(document.activeElement===node){ 
      window.focus(); 
      setTimeout(function(){ 
       node.focus(); 
      },0); 
     } 
    } 
} 
+1

मुझे विश्वास नहीं है कि इसमें अधिक अपवर्तक नहीं हैं। इस समस्या के लिए एकमात्र कामकाजी समाधान। आप एक जीवन बचतकर्ता हैं :-) –

1

टेरी के जवाब का एक बदलाव यह मोबाइल सफारी बग (!!!) मेरे मामले में चारों ओर काम किया। इधर, '#INPUT' और इस कोड को iframe पृष्ठ पर है:

var el = $('#input'); 
el.on('keydown', function() { 
    window.focus() 
    el.focus() 
}); 

बग कई मायनों में चलाता है लेकिन 'keydown' मज़बूती से के माध्यम से आता है। यह अगली 'कीप्रेस' भी पहुंचता है।