2012-07-23 11 views
20

मेरे पास एक ऐसा पृष्ठ है जिसे मैं ड्रैग/ड्रॉप ईवेंट को बाध्य करना चाहता हूं। मैं ब्राउज़र में संपूर्ण पृष्ठ ड्रॉप लक्ष्य होना चाहता हूं, इसलिए मैंने अपनी घटनाओं को document ऑब्जेक्ट में बाध्य कर दिया है। मेरे आवेदन की सामग्री मुख्य सामग्री क्षेत्र में AJAX के माध्यम से लोड की गई है, हालांकि, और अपलोड पेज वर्तमान में दिखाई देने पर मुझे केवल इन ईवेंट हैंडलर सक्रिय होने की इच्छा है।यदि आप पहले से मौजूद नहीं हैं तो आप केवल ईवेंट हैंडलर को कैसे बांध सकते हैं?

अभी, मैं अपलोड पेज पुनर्प्राप्त होने पर ईवेंट हैंडलर को बाध्य कर रहा हूं; हालांकि, प्रत्येक बार जब अपलोड पेज सक्रिय हो जाता है, तो यह एक नया इवेंट हैंडलर बांधता है, जो उपयोगकर्ता को अपलोड पेज पर जाने पर कई बार हैंडलर को आग लगाना पड़ता है, और फिर वापस आता है। मैं सोच रहा था कि मैं इसे हल कर सकता हूं अगर मैं हैंडलर केवल तभी बांध सकता हूं जब यह पहले से बंधे न हो। क्या यह संभव है, या क्या मैं बेहतर विकल्प देख रहा हूं?

प्रासंगिक कोड है, अगर यह मदद करता है:

$(document).bind('dragenter', function(e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
}).bind('dragover', function(e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
}).bind('drop', function(e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
    self._handleFileSelections(e.originalEvent.dataTransfer.files); 
}); 
+0

की [jQuery जांच अगर घटना तत्व पर मौजूद है] संभव डुप्लिकेट (http://stackoverflow.com/questions/1515069/jquery-check-if-event-exists-on- तत्व) – dgw

उत्तर

27

Unbind मौजूदा ईवेंट हैंडलर्स इससे पहले कि आप नए लोगों को बाँध। यह namespaced events [docs] साथ वास्तव में स्पष्ट है:

$(document) 
    .off('.upload') // remove all events in namespace upload 
    .on({ 
     'dragenter.upload': function(e) { 
      e.stopPropagation(); 
      e.preventDefault(); 
     }, 
     'dragover.upload': function(e) { 
      e.stopPropagation(); 
      e.preventDefault(); 
     }, 
     // ... 
    }); 
+2

मुझे '()' और 'off()' के बजाय 'बाइंड()' और 'unbind() 'का उपयोग करना था, लेकिन यह विधि अच्छी तरह से काम करती थी। धन्यवाद! – FtDRbwLXw6

+0

हां, यदि आप jQuery के पुराने संस्करण से फंस गए हैं (किसी ऑब्जेक्ट को 'बाइंड' में पास करना भी काम करना चाहिए)। JQuery 1.2 में नामांकित घटनाएं पेश की गई हैं, इसलिए निश्चित रूप से काम करना चाहिए :) हैप्पी कोडिंग! –

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

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