2012-01-28 15 views
6
$(".container").on("contextmenu", ".photos-bottom .albums li", function(e) { 

$('html').bind('click', function (event) { 
    alert(id); 
}); 

return false; 
}); 

जब मैं कई बार (contextmenu के लिए) दायाँ क्लिक करता हूं और फिर एक बार HTML पर क्लिक करता हूं, तो यह चेतावनी देता है कि मैंने कितनी बार क्लिक किया था।jQuery कई बार फायरिंग बाध्य?

तो यदि मैं एक बार दायाँ क्लिक करता हूं, तो बाएं क्लिक करें, यह एक बार पॉपअप दिखाता है। यदि मैं तीन बार दायाँ क्लिक करता हूं, तो बायाँ क्लिक करें, यह पॉपअप को तीन बार दिखाता है।

ऐसा क्यों है?

+0

आप उस कोड के साथ क्या करने की कोशिश कर रहे हैं? 'क्लिक' ईवेंट को 'html' से जोड़ना? – gdoron

+0

आप 'contextmenu' हैंडलर में 'क्लिक' हैंडलर को फिर से क्यों बाध्य करते हैं? यह बहुत समझ में नहीं आता है। – Tomalak

+0

यह एक पॉपअप है, और जब मैं बाध्य करता हूं तो एचटीएमएल पर क्लिक करें, इसलिए जब मैं पॉपअप के बाहर क्लिक करता हूं तो यह मेनू को बंद करने के लिए इस घटना को आग लगा देता है, और जो कुछ भी। (इसके लिए बहुत अधिक कोड है, इसलिए बहुत कुछ नहीं है जो आप नहीं देखते हैं) –

उत्तर

19

$('html').unbind('click').bind('click') इसे ठीक किया गया।

+0

इसके बजाय उस कोड को' on' contextmenu हैंडलर के बाहर ले जाएं। – ShankarSangoli

+0

धन्यवाद, लेकिन इसे काम करने के लिए इसे जरूरी है जब इसे मेनू खोला गया हो। –

+1

धन्यवाद आप मेरी मदद करते हैं (वाई) –

4

चूंकि आपका क्लिक ईवेंट प्रत्येक बार एक संदर्भ मेनू ईवेंट होता है, इसलिए आप वास्तव में प्रत्येक बार राइट क्लिक करते समय अतिरिक्त बाध्य जोड़ रहे हैं। घटना निष्पादन की बढ़ती संख्या के कारण यही कारण है।

आप चाहिए या तो:

क) घटना निकल जब संदर्भ मेनू बंद कर दिया है, या

ख) अपने ContextMenu कॉलबैक फ़ंक्शन के बाहर क्लिक करें घटना बाँध।

+0

धन्यवाद, हाँ इसे और अधिक काम करने पर यह ठीक करता है: $ ('html')। Unbind ('click')। बाइंड (' क्लिक करें ') –

+1

खुश मैं सेवा का हो सकता है :) – Kristian

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