2009-04-12 17 views
68

मैं एक साधारण कोड के साथ समस्या को समझाने की कोशिश करूंगा।jquery इवेंट हैंडलर को ओवरराइट करने के लिए कैसे करें

var fireClick = function() { alert('Wuala!!!') }; 

$('#clickme').click(fireclick); 
$('#clickme').click(fireclick); 

तो अब यह स्पष्ट रूप से 2 बार सतर्क होगा लेकिन मुझे केवल एक बार चेतावनी चाहिए। इतने सारे तरीकों का प्रयास किया, लेकिन कोई परिणाम नहीं।

धन्यवाद।

+0

क्या आप कुछ संदर्भ दे सकते हैं कि ईवेंट को बाध्य करने के लिए कॉल कैसे दो बार होता है? शायद आप दूसरी कॉल को बदल सकते हैं कि आपका कोड थोड़ा कैसे काम करता है। –

+1

संबंधित: http://stackoverflow.com/questions/209029/best-way-to-remove-an-event-handler-in-jquery –

+17

यह "वोला" है। :) –

उत्तर

121

jQuery 1.7 के रूप में आपको ईवेंट हैंडलर और on को हटाने के लिए off का उपयोग करना चाहिए, हालांकि आप अभी भी click शॉर्टंड का उपयोग कर सकते हैं।

$('#clickme').off('click').on('click', fireclick); 
$('#clickme').off().on('click', fireclick); 

मूल जवाब:

आप, सभी क्लिक संचालकों की जगह unbind पहले फोन एक समारोह तर्क के बिना चाहते हैं। यदि आप सभी ईवेंट हैंडलर को प्रतिस्थापित करना चाहते हैं, तो ईवेंट प्रकार निर्दिष्ट न करें।

$('#clickme').unbind('click').click(fireclick); 
$('#clickme').unbind().click(fireclick); 
+1

बह! आप कॉल को चेन करने के लिए जीतते हैं, लेकिन हो सकता है कि आपका जवाब परिशोधित करें ताकि यह केवल विशिष्ट हैंडलर को फिर से जोड़ा जा सके? तो: $ ('# क्लिकमे')। अनबिंड ('क्लिक', फायरक्लिक)। क्लिक करें (फायरक्लिक) –

+4

प्रश्न "jquery इवेंट हैंडलर ओवरराइट करें" - मैं मान रहा था कि वह उन्हें सभी को बदलना चाहता था। ऐसा करने के लिए उसे हर बार अनबिंड कॉल करने की आवश्यकता होती है (यही कारण है कि मैंने दोनों पर कॉल दोहराया) और फ़ंक्शन तर्क निर्दिष्ट नहीं किया है। – tvanfosson

+3

जब आपने प्रश्न का उत्तर दिया तो यह निश्चित रूप से ऐसा करने का सही तरीका था, इसलिए मैंने ऊपर उठाया है। उस ने कहा, मेरा मानना ​​है कि "नया और बेहतर" तरीका ऑन() और ऑफ() विधियों के साथ है। चूंकि यह उत्तर खोज के लिए पहला Google परिणाम है "jquery इवेंट हैंडलर को प्रतिस्थापित करें" यह आपके उत्तर में जोड़ने में सहायक हो सकता है। '$ ('# क्लिकमे') बंद ('क्लिक करें')। ('क्लिक करें', फायरक्लिक); 'या बस' $ (' # क्लिकमे ')। बंद (' क्लिक करें ')। क्लिक करें (फायरक्लिक); ' । – chucksmash

3

मैं अतिरिक्त कॉल को खत्म करने की कोशिश करेंगे, लेकिन आप tyhat से कम इन दोनों को हर बार फोन करने के लिए सुनिश्चित कर सकता है:

$('#clickme').unbind('click', fireclick); 
$('#clickme').click(fireclick); 
+0

धन्यवाद, यह अब काम करता है :) – taras

18

आप पहली बार दूर करने के लिए jQuery समारोह unbind उपयोग कर सकते हैं घटना:

var fireClick = function() { alert('Wuala!!!') }; 

$('#clickme').click(fireclick); 
$('#clickme').unbind('click', fireClick); // fireClick won't fire anymore... 
$('#clickme').click(fireclick); // ...but now it will 
-8

आपको सेट इंटरवल का उपयोग करना चाहिए। समस्या यह है कि आपके पास एक ही समय में दो अलर्ट पॉप नहीं हो सकते हैं। सबसे पहले एक पहले बंद करने के लिए या एक दूसरे स्क्रीन पर दिखाई नहीं कर सकता है ...

+5

क्या आपने सवाल पढ़ा है? – kapa

20

एक नाम स्थान का उपयोग करें बनाने के लिए सुनिश्चित करें कि आप किसी अन्य श्रोताओं को दूर नहीं है: कोई अन्य के रूप में जब तक

$('#clickme').off('click.XXX').on('click.XXX', fireclick); 

कोड XXX का उपयोग करता है, आप यह सुनिश्चित कर सकते हैं कि आपने किसी अन्य व्यवहार को गड़बड़ नहीं किया है जिसे आप जानते नहीं थे।

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