2011-10-07 17 views
8

मैं एक आईओएस वेबकिट आधारित ऐप के लिए एक मेनू को कार्यान्वित करने की कोशिश कर रहा हूं जिसमें उपयोगकर्ता छूता/क्लिक करता है और मेन्यू बटन ('.menu_item') रखता है, 500ms उप मेन्यू खोलने के बाद (div.slide_up_sub_menu), और उपयोगकर्ता अपनी उंगली/माउस को उपमेनू ली आइटम तक छोड़ने और रिलीज़ करने में सक्षम होना चाहिए।आईओएस वेबकिट में टचचेंड इवेंट फायरिंग नहीं?

<li class="menu_item"> 
     ASSET MANAGEMENT 
     <div class="slide_up_sub_menu hidden_menu"> 
     <ul class="submenu"> 
      <li>Unified Naming Convention</li> 
      <li>Version Control</li> 
     </ul> 
     </div> 
    </li> 

एप्लिकेशन को यह पता लगाने में सक्षम होना चाहिए कि कौन सा सबमेनू आइटम टचचेन्ड/माउसअप ईवेंट चालू हुआ। मैं मेन्यू आइटम में टचस्टार्ट इवेंट बाध्य कर रहा हूं, 500 एमएमएस की प्रतीक्षा कर रहा हूं, और बाद में सबमेनू को दिखाने के लिए कह रहा हूं। जब कोई उपयोगकर्ता अपनी उंगली जारी करता है तो एक टचेंड ईवेंट को सबमेनू को बंद करना बंद कर देना चाहिए। यदि उपयोगकर्ता ने उपमेनू आइटम पर अपना स्पर्श बंद कर दिया है तो इसे पता लगाया जाना चाहिए। वर्तमान में पता लगाने के जो सबमेनू आइटम की एक mouseup घटना कार्यों पर सफारी में डेस्कटॉप पर हुआ:

$('ul.submenu li').live('mouseup', function(e){ 
    console.log($(e.currentTarget)); //works on the desktop 
}); 

लेकिन अगर मैं एक ही एक touchend हैंडलर यह एक iPad पर काम नहीं करता का उपयोग कर कार्य करें:

$('ul.submenu li').live('touchend', function(e){ 
    console.log($(e.currentTarget)); //never fires 
}); 

अगर मैं हर touchend घटना के लिए लग रही है जब मैं एक सबमेनू आइटम पर स्पर्श अंत मैं माता पिता के उप मेनू आइटम के लिए एक संदर्भ प्राप्त कर सकते हैं:

$(document.body).bind('touchend', function(e) { 
    console.log($(e.target).html()); //logs ASSET MANAGEMENT 
}); 

लेकिन सबमेनू आइटम के लिए कोई संदर्भ।

क्या किसी को भी कोई विचार है कि उपमेनू वस्तुओं पर टचेंड ईवेंट क्यों नहीं निकाला जा रहा है?

धन्यवाद

उत्तर

0

आप मल्टीटच डेटा का उपयोग करने की जरूरत नहीं है, तो आप iPad पर mouseup का उपयोग कर रख सकते हैं।

आगे पढ़ने: http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html

+0

उत्तर के लिए धन्यवाद roee, दुर्भाग्यवश, जब आप स्क्रीन को स्पर्श करते हैं तो mousedown ईवेंट तुरंत आग नहीं होता है। यह आपकी अंगुली को माउसअप ईवेंट के साथ स्क्रीन में छोड़ने के बाद ही आग लगती है। http://www.quirksmode.org/blog/archives/2008/08/iphone_events.html – Craig

3

हो सकता है कि यह थोड़ा जवाब देने के लिए देर हो चुकी है। यह घटना कभी भी आग नहीं होगी, क्योंकि स्पर्श तत्व घटनाओं पर आग लगती है जिस पर टचस्टार्ट हुआ था। तो, जो कुछ आप करना चाहते हैं, उसे करने के लिए, एक समाधान document.elementFromPoint विधि का उपयोग करना है, जिसके लिए आप उचित एक्स और वाई निर्देशांक भेजेंगे।

16

टचचेन्ड आग नहीं है क्योंकि टचकैंकल पहले निकाल दिया गया है। आप पूर्ण टच इवेंस चाहते हैं निपटने आप अन्यथा जब एक touchmove घटना होती है

e.preventDefault() 
"touchmove" घटना के कॉलबैक में

कॉल करने की आवश्यकता है, अगर ब्राउज़र फैसला करता है कि यह एक स्क्रॉल घटना यह स्पर्श करके रद्द सक्रिय होगा और कभी नहीं आग है touchend।

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

  • कोई संबंधित समस्या नहीं^_^