2010-06-11 15 views
34

में क्लिक इवेंट के लिए jQuery का उपयोग कैसे करूं जब मैं एक साधारण क्लिक ईवेंट के लिए jQuery का उपयोग करता हूं तो यह केवल लिंक के लिए काम करता है। वहाँ यह फैला आदि के लिए काम करने के लिए एक रास्ता है:मैं आईफोन वेब एप्लिकेशन

$("span.clicked").live("click", function(e){alert("span clicked!")}); 

$("a.clicked").live("click", function(e){alert("link clicked!")}); 

स्पैन सफारी में काम करता है लेकिन नहीं मोबाइल सफारी (iPhone या iPad पर) जबकि एक टैग दोनों में काम करता है।

उत्तर

25

आपको "टचस्टार्ट" और "स्पर्श" घटनाओं को सुनने की आवश्यकता है। jQuery के साथ श्रोताओं को शामिल करें ...

$('span').bind("touchstart", function(e){alert('Span Clicked!')}); 

तुम इतनी है कि आप सत्यापित कर सकते हैं कि तत्व को निशाना बनाया जब उंगली छुआ तत्व लक्षित रूप में ही है जब उंगली हटा दिया गया था एक touchstart और touchend के लिए सुनने के लिए इच्छा हो सकती है ।

मुझे यकीन है कि वहाँ शायद यह करने के लिए एक बेहतर तरीका है कर रहा हूँ लेकिन यह है कि चाहिए काम :)

संपादित करें: एक बेहतर तरीका नहीं है! https://stackoverflow.com/a/4910962/16940

+0

धन्यवाद। क्या इसका मतलब यह है कि आईफोन लिंक को छोड़कर क्लिक घटनाओं को अनदेखा करता है (शायद अन्य संभावित संकेतों के कारण)? – Gazzer

+0

आप एक समापन कोष्ठक खो रहे हैं। $ ('Span') होना चाहिए। बाइंड ("टचस्टार्ट", फ़ंक्शन (ई) {अलर्ट ('स्पैन क्लिक किया गया!')}; – mhenry1384

102

मैंने इसके साथ भी संघर्ष किया। चारों ओर घूमने और समस्या को समझने की कोशिश करने के बाद, मैं एक साधारण समाधान में आया।

यदि आप तत्व का cursorpointer पर सेट करते हैं, तो यह जादुई रूप से Jquery के लाइव और क्लिक ईवेंट के साथ फिर से काम करता है। यह सिर्फ सीएसएस में वैश्विक रूप से सेट किया जा सकता है।

+1

ऑटो-प्ले नहीं कर सकते हैं इस तरह के फिक्स के लिए महीनों के लिए धन्यवाद। मैं आईफोन/पॉड/पैड डिटेक्शन के साथ आया हूं और उन उपकरणों के लिए अन्य घटनाओं पर क्लिक इवेंट बदल रहा हूं। यह काफी बेहतर है। – danmayer

+6

ध्यान दें कि यदि आप 'कर्सर: पॉइंटर;' होवर पर करते हैं तो यह काम नहीं करेगा। – pseudosudo

+0

@pseudosudo क्या आप विस्तृत कर सकते हैं? आईपैड पर कोई होवर नहीं है - या आप कुछ सम्मान में इस ब्रेकिंग डेस्कटॉप संस्करणों के बारे में बात कर रहे हैं, या 'गैलेक्सी एस 4 पर सैमसंग होवर'? –

18

आप वास्तव में 'काल' टैग (या एक 'एक' टैग के अलावा और कुछ) के रूप में इतने लंबे समय, touchstart या touchend घटना का उपयोग करने की जरूरत नहीं है की एक सीएसएस संपत्ति है:

cursor:pointer 

क्लिक

1

पंजीकृत करेगा, मैंने सबकुछ करने की कोशिश की और कोई भी चाल काम नहीं कर सका। यह पता चला कि मुझे क्लिक इवेंट नहीं मिल सका क्योंकि मेरे पास आईएमजी के तहत एक वीडियो तत्व था। वीडियो तत्व स्पष्ट रूप से क्लिक घटनाओं खाते हैं।

+0

मुझे एक ही समस्या है। नीचे वीडियो टैग मुद्दा है। क्या आपने इसे हल किया? –

+0

मुझे लगता है कि मैं वीडियो तत्व को छुपा रहा हूं (प्रदर्शन: कोई नहीं)। यह एकमात्र रास्ता प्रतीत होता था। – mhenry1384

2

आप खाली ऑनक्लिक विशेषता जोड़कर क्लिक ईवेंट उत्पन्न करने के लिए ब्राउज़र को भी जोड़ सकते हैं। मामले में एक बेल्ट और ब्रेसिज़ दृष्टिकोण के लिए या तो दृष्टिकोण किसी भी आईओएस अद्यतन में काम करना बंद है, तो आप कुछ इस तरह इस्तेमाल कर सकते हैं:

$("span.clicked").live("click", function(e){alert("span clicked!")}) 
       .attr('onclick','') 
       .css('cursor','pointer'); 

(यह मानते हुए कि आप किसी भी वास्तविक onclick विशेषताओं आप कोई आपत्ति नहीं है नहीं है obliterating)

1

आप एक खाली onclick विशेषता जोड़ सकते हैं, तो जैसे:

<span onclick=''>Touch or Click Me</span> 
jQuery('span').live('click', function() { alert('foo'); }); 
संबंधित मुद्दे