Jquery

2009-05-05 6 views
102

में सभी क्लिक ईवेंट हैंडलर को कैसे हटाएं मुझे कोई समस्या है। मूल रूप से, जब कोई उपयोगकर्ता एक पृष्ठ पर 'संपादन' लिंक पर क्लिक करता है, तो निम्न Jquery कोड चलाता है:Jquery

$("#saveBtn").click(function() { 
    saveQuestion(id); 
}); 

ऐसा करने से, सहेजें बटन की onClick ईवेंट saveQuestion() प्रणाली को बुलाती है और की आईडी पर गुजरता प्रश्न जिसके लिए 'संपादन' लिंक क्लिक किया गया था।

लेकिन अगर एक ही सत्र में उपयोगकर्ता 2 सवालों पर संपादित करें क्लिक करने के बाद बजाय पिछले click ईवेंट हैंडलर अधिलेखन की, इसके बजाय 2 ईवेंट हैंडलर्स को चलाने के लिए कारण बनता है, जिनमें से एक saveQuestion(1) कॉल कर सकते हैं और अन्य saveQuestion(2) कॉल कर सकते हैं। ऐसा करने से 1 प्रश्न दूसरे को ओवरराइट करता है।

क्या पिछले सभी click घटनाओं को निकालने का कोई तरीका है जो एक बटन को सौंपा गया है?

उत्तर

179

तुम इतनी तरह की एक घटना को दूर करने के off() का प्रयोग करेंगे:

$("#saveBtn").off("click"); 

लेकिन इस सभी क्लिक ईवेंट इस तत्व के लिए बाध्य कर निकाल देंगे। यदि SaveQuestion के साथ फ़ंक्शन एकमात्र ईवेंट बाध्य है तो उपरोक्त यह करेगा। तो निम्न कार्य करें नहीं:

$("#saveBtn").off("click").click(function() { saveQuestion(id); }); 
+29

jQuery 1.7 के बाद से, आप चालू और बंद बाँध के बजाय का उपयोग करें और –

+0

@LockTar निकल जाना चाहिए कि आप कर सकते हैं सुझाव है कि यह कैसे बजाय लिखा जाना चाहिए? –

+0

@JohnMagnolia ऊपर मेरे परिवर्तन देखें। –

13

क्या बटन पर असाइन किए गए सभी पिछले क्लिक ईवेंट को हटाने का कोई तरीका है?

$('#saveBtn').unbind('click').click(function(){saveQuestion(id)}); 
2

यदि आप इस्तेमाल किया ...

$(function(){ 
    function myFunc() { 
     // ... do something ... 
    }; 
    $('#saveBtn').click(myFunc); 
}); 

... तो यह आसान बाद में निकल करने के लिए किया जाएगा।

+1

आप कैसे समझते हैं? कोई फर्क नहीं पड़ता कि तत्व की घटना कैसे बंधी जाती है, वे हमेशा एक ही तरीके से अनबाउंड हो सकते हैं ... $ ('# saveBtn')। Unbind ('जो भी घटनाएं'); अब, आरई-बाइंड करने के लिए ... हाँ, कुछ परिस्थितियों में आपकी तकनीक आसान हो सकती है। – KyleFarris

+1

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

6
$('#saveBtn').off('click').click(function(){saveQuestion(id)}); 
0
$('#saveBtn').off('click').on('click',function(){ 
    saveQuestion(id) 
}); 

jQuery के उपयोग off और on