मेरे पास HTML इनपुट और बटन तत्व हैं। मैं फॉर्म सबमिट करने के लिए बटन का उपयोग करता हूं, द्वितीयक विंडोज़ खोलता हूं, इत्यादि समस्या यह है कि एक क्लिक 2 (और कभी-कभी कई और) फॉर्म सबमिशन में बदल रहा है, या दो अतिरिक्त ब्राउज़र विंडो खोल रहा है। मैंने कई वेब ब्राउज़र में समस्या का पुनरुत्पादन किया है। मैंने jQuery संस्करणों को स्विच करने का प्रयास किया है और इससे कुछ भी नहीं बदला है। इस तरह की चीज होने के कारण क्या हो सकता है?jQuery: एकल बटन क्लिक करें, ईवेंट फायरिंग दो या दो बार
उत्तर
क्योंकि आप क्लिक करने के लिए एक ही हैंडलर बताए जाते हैं आपकी समस्या हो रहा हो सकता है घटना कई बार। मेरा सुझाव है कि आप जांच लें कि जिस लाइन को आप हैंडलर असाइन करते हैं, उसे अनजाने में कई बार नहीं कहा जा रहा है। एक अन्य समाधान एक फोन इस तरह पहले निकल करने के लिए हो सकता है:
$("#myButton").unbind("click").click(myHandler);
लेकिन कुछ कोड मैं सिर्फ अनुमान लगा रहा हूँ देखे बिना।
यह देखते हुए कि आप जानकारी का एक बहुत की आपूर्ति नहीं की है, सबसे अच्छा मैं सिफारिश कर सकते हैं एक() में दिख रही है
jQuery स्पार्कल "एक बार" फ़ंक्शन को कॉल करके एक बार एक ईवेंट को एक हाथ से बांधने के लिए एक साफ सुरुचिपूर्ण समाधान प्रदान करता है।
यह का उपयोग कर के रूप में डार्को जेड के सुझाव पर एक महत्वपूर्ण सुधार है:
$("#myButton").unbind("click").click(myHandler);
"क्लिक" इस घटना के लिए हर बार यह कहा जाता है जुड़े किसी भी अन्य "क्लिक" संचालकों निकल सकते हैं। तो आप निश्चित रूप से सुनिश्चित करते हैं कि यह केवल एक बार बंधे हुए हैं, हालांकि आप गलती से सबकुछ अनइंड करें! ओह!
जेरेट का सुझाव "क्लिक" हैंडलर को सही कहने के बाद अनबिंड करता है, इसलिए यदि आप हैंडलर को फिर से बुलाया जाता है (इसकी प्रारंभिक आग के बाद) आपको हैंडलर को दोबारा जोड़ना होगा।
jQuery स्पार्कल का एक बार उपयोग करने से हैंडलर को जितनी बार आवश्यकता हो उतनी बार आग लगने की अनुमति होगी, लेकिन कई बार इसके बजाय केवल एक बार बांधने की अनुमति होगी। आप इसे इस तरह का उपयोग कर सकते हैं:
$('#myButton').once('click', function(){
// my handler
});
या यदि आपने अभी jQuery के "बाँध" में बनाया की तरह अपने कॉलबैक में डेटा का समर्थन करना चाहते हैं, तो आप उपयोग कर सकते हैं:
$('#myButton').once('click', data, function(){
// my handler
});
आप पा सकते हैं एक बार फ़ंक्शन here को परिभाषित करने के लिए स्रोत कोड।
यह एजीपीएल लाइसेंस के तहत खुला स्रोत है, इसलिए आप इससे निपटने के लिए स्वतंत्र महसूस कर सकते हैं कि आपको इससे क्या चिंता है! :-) यह दिन-दर-दिन आधार पर भी सक्रिय रूप से विकसित होता है ताकि आप कभी भी समर्थन पर कम न हों।
लेकिन सबसे महत्वपूर्ण बात यह है कि यह प्लगइन और एक्सटेंशन को और अधिक आसानी से विकसित करने की अनुमति देने के लिए एक DRY प्लगइन/प्रभाव फ्रेमवर्क है। तो उम्मीद है कि यह उस लक्ष्य को प्राप्त करने में मदद करता है!
मुझे पता है कि यह पुराना है, लेकिन यह जवाब मुझे समाधान को सही करने के लिए ड्राइव करता है .. आज के jQuery संस्करण में मैंने उपयोग किया है। एक बाध्यकारी कार्य और मेरी समस्या हल हो गई है –
मेरे लिए यह
$(function() {
$('.some-element').click(function() {
//event that fires twice
});
//some exception-throwing code here
});
jQuery गुमनाम तैयार फ़ंक्शन को कॉल किया गया था दो बार (?!) अपवाद की वजह से क्लिक समारोह में दो बार के लिए बाध्य किया जाएगा ताकि संपन्न हुई थी।
आप $("div").one("click", function() { ... });
उपयोग कर सकते हैं तत्वों के लिए एक घटना के लिए कोई हैंडलर देते हैं। हैंडलर प्रति तत्व एक बार में निष्पादित किया जाता है।
से पहले यह मेरे लिए काम किया के बाद से मैं मूल रूप से इस्तेमाल किया था कुछ इस तरह कॉलिंग $ ('# myButton')। पर ('क्लिक' ... मेरे श्रोताओं आवंटित करने के लिए।
$('#myButton').off();
यह अच्छी तरह से काम करेगा। यह मेरे लिए काम करते हैं।
मुझे मोडल संवाद विंडो में कोई समस्या थी। प्रत्येक बार जब मैंने सत्र में एक संवाद खोला था तो घटना एक बार निकाल दी गई थी। पहली खिड़की पर कोई समस्या नहीं, दूसरी खिड़की पर दो बार निकाल दिया गया, तीसरी खिड़की पर तीन बार निकाल दिया गया, आदि
मैंने पाया कि संवाद के लिए प्रारंभिक कार्य प्रत्येक बार बुलाया जा रहा था जब मैंने एक नई संवाद विंडो खोली एक ही सत्र मैंने एक ग्लोबल वैरिएबल notInit = -1 जोड़ा और init चलाते समय मान को 1 असाइन किया। मैंने init फ़ंक्शन चलाने से पहले INInit के मान की जांच की और मान -1 के साथ केवल init के साथ आगे बढ़े।
ऐसा लगता है कि मैं कुछ चाहता हूं लागू करने की तरह, लेकिन मुझे वाक्य वाक्यविन्यास के बारे में निश्चित नहीं है। यदि यह बहुत अधिक लेखन नहीं है, तो क्या आप अपने उत्तर में एक कोड स्निपेट प्रदान करेंगे? – Chris22
- 1. UIGestureRecognizer दो बार फायरिंग?
- 2. jQuery: पाठ बॉक्स KeyUp दो बार फायरिंग
- 3. DOMContentLoaded ईवेंट एक पृष्ठ लोड के लिए दो बार फायरिंग
- 4. दो बार क्लिक करने
- 5. क्लिक श्रोता पर दो बार
- 6. एचटीएमएल एंड्रॉयड में दो बार फायरिंग onclick
- 7. भाषण बुलबुले के लिए दो क्लिक ईवेंट
- 8. jquery मोबाइल क्लिक घटना दो बार आग लगती है
- 9. आईपैड touchstart फायरिंग में दो बार
- 10. jQuery कई बार फायरिंग बाध्य?
- 11. एंड्रॉयड View.OnKeyListener:, एक बार क्लिक करें दो बार
- 12. दो बार
- 13. jQuery: क्लिक करें, माउसेंटर ईवेंट
- 14. jQuery रहते हैं ('क्लिक') के लिए फायरिंग राइट क्लिक करें
- 15. jQuery के क्लिक ईवेंट
- 16. दो बार
- 17. JQuery - LI या SPAN तत्वों पर क्लिक करें ईवेंट जोड़ें?
- 18. डब्ल्यूपीएफ: बटन एकल क्लिक + डबल क्लिक इश्यू
- 19. एंड्रॉइड अधिसूचना दो बार
- 20. दो बार
- 21. Backbone.js क्लिक करें ईवेंट
- 22. एचटीएमएल बटन हैंडलर क्लिक करते समय दो बार आग लगती है (जब ऑटोवेन्टवायरअप = "ट्रू")
- 23. jQuery क्लिक ईवेंट हैंडलर एक चेकबॉक्स
- 24. दो बार
- 25. बटन पर क्लिक करें पृष्ठ पर क्लिक करें ईवेंट
- 26. jQuery दो बार इज़े का आकार क्यों बदलता है?
- 27. Google क्लोजर - Html5History नेविगेशन ईवेंट को दो बार
- 28. एएसपीनेट फायरिंग गलत बटन
- 29. दो बार रेंडरसेक्शन कॉल करें ...?
- 30. दो एकल-कोट्स
आप शायद इसे गलत कर रहे हैं। कृपया http://www.jsbin.com पर कुछ कोड या संस्करण पोस्ट करें ताकि हम आपकी मदद कर सकें। – Kobi
हां, आपको निश्चित रूप से अपना कोड पोस्ट करने की आवश्यकता है अन्यथा हमारे पास सहायता करने का कोई मौका नहीं है। –
मुझे एक ही समस्या है, समाधानों में से कोई भी काम नहीं करता है क्योंकि मेरे मामले में 1 पॉप विंडो पुष्टि ("..") फ़ंक्शन द्वारा कॉल किया जाता है और उस समय एंटर दबाकर उस समय "ठीक" और 1 क्रिया होगी पृष्ठभूमि में चयनित आइटम। कोई मदद? –