2015-06-17 16 views
11

यहाँ कुछ अजीब है, कि मैंने पहले मोबाइल ब्राउज़र में काम कर रहा था यकीन है कि महसूस किया: Android पर Chrome, और iOS पर Safari में, ऐसा लगता है touchstart घटना के बाद निकाल दिया जाता है क्लिक करें घटना, उससे पहले नहीं। यह परिवर्तन कब हुआ?क्लिक के बाद टचस्टार्ट ईवेंट क्यों है?

एक साधारण उदाहरण:

jQuery(function($) { 
    var touched = false; 
    $('#clicky').on('touchstart', function(evt){ 
     touched = true; 
     evt.preventDefault(); 
    }) 
    .click(function(){ 
     if (!touched) { 
      alert("somehow touch didn't fire") 
     } 
    }); 
}) 

भागो इस बेला, और आप चेतावनी Android और iOS पर पॉप अप कर सकते हैं देखेंगे, जब यह वास्तव में कभी नहीं दिखाया जाना चाहिए!

http://jsfiddle.net/quxnxu7d/2/

+1

फ़ायरफ़ॉक्स में स्पर्श अनुकरण में। – Xufox

+0

@Xufox तो यह अभी तक एक और वेबकिट-बग है? मैं आश्चर्यचकित नहीं होगा ... – NoBugs

+0

इसके बारे में इतना यकीन नहीं है ... मैंने फ़ायरफ़ॉक्स पर एंड्रॉइड या फ़ायरफ़ॉक्स ओएस आदि पर इसका परीक्षण नहीं किया है। – Xufox

उत्तर

3

आप mousedown बजाय click उपयोग करने की कोशिश की है? इस तरह आपको स्पर्श के लिए अलग-अलग कार्यक्रम मिलना चाहिए और बिना किसी डबल फायरिंग के क्लिक करना चाहिए। इस साइट को सुलभ रखने के लिए आपको keydown का उपयोग करने की भी आवश्यकता होगी।

7

मैं Android पर Chrome के माध्यम से भाग गया और यह काम किया, जैसा कि आप मेरे लिए उम्मीद। मैंने touchstart हैंडलर को एक अलर्ट जोड़ा और यह सुनिश्चित करने के लिए निकाल दिया गया कि यह पहले फायरिंग कर रहा था और ऐसा हुआ।

touch events mdn article पर एक नजर डालें। लेख विशेष रूप से उल्लेख है:

एक touchstart या एक श्रृंखला के पहले touchmove घटना पर preventDefault() कॉल फायरिंग

Click is a mouse event तो यह काम आपकी अपेक्षा के अनुसार "चाहिए" से इसी माउस घटनाओं से बचाता है (और यह मेरे लिए काम कर रहा था)। मुझे लगता है कि घटनाओं वास्तव में (alert() के बजाय console.log() का उपयोग करें) अपने लक्ष्य ब्राउज़र पर आदेश से बाहर चल रहे हैं की पुष्टि होगी। यदि वे हैं, जो कि सही ब्राउज़र/चश्मा से कम के साथ पूरी तरह से संभव है, तो mouseup जैसे विभिन्न माउस ईवेंट का उपयोग करने का प्रयास करें। मेरा अनुमान है कि आप एक ऐसी घटना ढूंढ पाएंगे जो लगातार काम करता है।

शुभकामनाएं!

1

एक भौतिक नल और कुछ मोबाइल ब्राउज़र पर एक क्लिक घटना की फायरिंग (जैसे आईओएस सफारी) मैं एक ही मुद्दे में भाग गया और FastClick jQuery प्लगइन के लिए मुझे

है एक यह तय जो 300 मि.से का विलंब होगा यह उम्मीद के रूप में काम करता है (मोबाइल दृश्य → स्पर्श इवेंट का अनुकरण → देव उपकरण) देखने के FastClick

संबंधित मुद्दे