JQuery का उपयोग करके सभी क्लिक ईवेंट हैंडलर कैसे निकालें?


121

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

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

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

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

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

जवाबों:


203

आप एक घटना को दूर करने के लिए () का उपयोग करेंगे :

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

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

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

31
JQuery 1.7 के बाद से, आपको बाइंड और अनबाइंड के बजाय पर और बंद का उपयोग करना चाहिए
राल्फ जानसेन

@LockTar आप सुझाव दे सकते हैं कि इसके बजाय इसे कैसे लिखा जाना चाहिए?
जॉन मैग्नोलिया

@JohnMagnolia ऊपर मेरे परिवर्तन देखें।
राल्फ जानसेन

1
.addAttr ( 'onclick'); या .removeAttr ('ऑनक्लिक');
अलीती

13

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

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

unbind()jQuery 3.0 के रूप में पदावनत किया गया है, और off()1.7 के बाद से उपयोग को प्रोत्साहित किया गया है।
स्काईलार इटनर


2

अगर आपने इस्तेमाल किया ...

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

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


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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.