2009-09-06 13 views
9

मेरे पास घटनाओं के साथ कुछ तत्व हैं। इससे पहले कि मैं उन तत्वों को हटा दूं, क्या मुझे पहले उन्हें अनबिंड करने की ज़रूरत है? अगर मैं नहीं करूँगा तो वे समस्याएं पैदा करेंगे?jquery unbinding यह आवश्यक है? (तत्वों को प्रतिस्थापित करना)

धन्यवाद।

संपादित करें: मुझे एहसास हुआ कि मैंने गलत तरीके से प्रश्न का उच्चारण किया है, इसलिए अब मैं एक संपादन कर रहा हूं, इसके लिए मुझे क्षमा करें, लेकिन मुझे लगता है कि यह एक नया प्रश्न बनाने के बजाय ऐसा करने के लिए और अधिक समझ में आता है।

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

उत्तर

17

नहीं, आपको ऐसा करने की आवश्यकता नहीं है (ईवेंट अनबाइंडिंग स्वचालित रूप से हटाने पर किया जाता है)।

+7

क्या होगा अगर jQuery ('div') के साथ div को साफ़ किया गया हो। Html (''); और उस div के अंदर कुछ क्लिक या बाध्य घटना थी। क्या यह स्वचालित रूप से अनबाइंड है। – kr1zmo

+0

@ kr1zmo यह वही है जो मैं खोज रहा था ... – rtpHarry

+3

'.html (htmlString)' [इसकी घटनाओं को भी अनइंड करेगा] (http://api.jquery.com/html/#html2) "इसके अतिरिक्त, jQuery नई सामग्री के साथ उन तत्वों को बदलने से पहले बाल तत्वों से डेटा और ईवेंट हैंडलर जैसी अन्य संरचनाओं को हटा देता है। " – rtpHarry

1

नहीं, इससे कोई समस्या नहीं आती है (जब तक कि किसी के पास कोई अप्रिय अनुभव न हो) :) मेरा पैसा 'यह महत्वपूर्ण नहीं है!' पर है।

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

7

एकमात्र ऐसा समय जिसे आपको स्पष्ट रूप से अनबिंड करने की आवश्यकता होगी, यदि आप पृष्ठ पर किसी ईवेंट के लिए ईवेंट हैंडलर नहीं चाहते थे।

डीओएम से एक तत्व को हटाने से उस तत्व के लिए घटनाओं और डेटा को भी हटा दिया जा सकता है। यहां प्रासंगिक स्रोत कोड

remove: function(selector) { 
    if (!selector || jQuery.filter(selector, [ this ]).length) { 
     // Prevent memory leaks 
     jQuery("*", this).add([this]).each(function(){ 
      jQuery.event.remove(this); 
      jQuery.removeData(this); 
     }); 
     if (this.parentNode) 
      this.parentNode.removeChild(this); 
    } 
} 
संबंधित मुद्दे