2009-01-29 16 views
9

मैं निम्नलिखित तरीके से सेटअप ऑनक्लिक ईवेंट हैंडलर है jQuery घटना:रद्द निपटने

element.onclick = function() { /*code */ } 

कल्पना कीजिए ईवेंट हैंडलर्स jQuery विधि बाँध() या इसी तरह के संचालकों का उपयोग करके सेटअप कर रहे हैं।

$('element').bind('click', function(){/*another function*/}) 

मैं शुरुआत में वर्णित हैंडलर से jQuery के साथ परिभाषित हैंडलर को कैसे रोक सकता हूं?

एनबी स्टॉपप्रॉपैगेशन() और आदि। JQuery की विधियां उस फ़ंक्शन से काम नहीं करती हैं, क्योंकि यह देशी ईवेंट ऑब्जेक्ट से गुजरती है।

उत्तर

7

मुझे यकीन है कि तुम क्या कह रहे हैं लेकिन शायद यह मदद मिलेगी 100% नहीं कर रहा हूँ:

आप jQuery के संपर्क में घटना निर्माता के माध्यम से एक नई घटना वस्तु (W3C डोम के अनुरूप) बना सकते हैं:

के लिए उदाहरण:

element.onclick = function(e) { 
    var aBetterEventObject = jQuery.Event(e); 
    // Now you can do what you want: (Cross-browser) 
    aBetterEventObject.preventDefault() 
    aBetterEventObject.isDefaultPrevented() 
    aBetterEventObject.stopPropagation() 
    aBetterEventObject.isPropagationStopped() 
    aBetterEventObject.stopImmediatePropagation() 
    aBetterEventObject.isImmediatePropagationStopped() 
} 

संपादित करें: फिर से अपने प्रश्न के माध्यम से पढ़ना, मुझे नहीं लगता कि प्रचार समस्या है - आप एक और भी भीतर चलने से एक ईवेंट हैंडलर रद्द करना चाहते करने लगते हैं टी हैंडलर - मुझे यकीन नहीं है कि यह संभव है। आप बस सभी हैंडलर को अनबाइंड कर सकते हैं (jQuery (elem) .unbind ('क्लिक करें')) लेकिन मुझे नहीं लगता कि आप इसके बाद क्या कर रहे हैं ...

3

jQuery ईवेंट में निम्न पंक्ति जोड़ने का प्रयास करें हैंडलर:

return false; 
5

जिमीपी के उत्तर से निम्नलिखित। मैंने इस

$('#x').click(function(e){ 
    alert('hello'); 
}); 
document.getElementById('x').onclick = function(){ 
    $('#x').unbind('click'); 
    alert("goodbye"); 
} 

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

+0

+1 मुझे नहीं लगता कि आप उस आदेश की गारंटी दे सकते हैं जिसमें ईवेंट हैंडलर को –

+0

2meouw कहा जाता है: जैसा कि मैंने समझाया है, अनबाइंड हैंडलर को हमेशा के लिए 'हैलो' चेतावनी देगा। यह अच्छा नहीं है :) उपयोग का मामला हो सकता है: document.getElementById ('x')। Onclick = function() {if (/ * कुछ मामला * /) {/ * कॉलिंग फ़ंक्शन को चेतावनी देना 'हेल्लो' * /}} तो जब मुझे तत्व पर एक और क्लिक मिलेगा, तो मामला गलत हो सकता है और हैंडलर को बुलाया जाना चाहिए। क्या मैंने स्पष्ट कर दिया है? :) – glaz666

2

Jquery में घटनाओं को नाम देने के लिए एक विधि है। जब तक आप निकल namespaced घटना अपने सामान्य onclick अप्रभावित होना चाहिए

$("a").bind("click.custom1",function(){ ... }); 
$("a").bind("click.custom2",function(){ ... }); 
$("a").trigger("click.custom2"); 
$("a").unbind("click.custom2"); 

: http://docs.jquery.com/Namespaced_Events

आप जोड़ सकते हैं, ट्रिगर और नामस्थान के माध्यम से एक ही घटना के लिए बाध्य अलग कार्यों को हटा दें। उपरोक्त क्लिक ईवेंट में आपको दो अलग-अलग नामस्थानों को बांधना पड़ सकता है यदि यह काम नहीं करता है।

+0

दुर्भाग्य से, मैं केवल इनलाइन विधि से जुड़े हैंडलर को बदल सकता हूं। मैं jQuery के साथ बाध्यकारी को प्रभावित नहीं कर सकता - यह किसी अन्य डेवलपर द्वारा किया जा सकता है जब वह मेरे कोड का पुन: उपयोग करेगा। – glaz666

+0

तब सेटअप क्या है? क्या आप किसी मौजूदा jquery स्क्रिप्ट में जोड़ने के लिए कुछ जावास्क्रिप्ट विकसित कर रहे हैं?शायद एक और तत्व है जिसे आप उस बुलबुले पर संलग्न कर सकते हैं जिसमें संलग्न jquery ईवेंट के साथ तत्व के माध्यम से हो। – roborourke

+0

मैं प्लगइन की तरह विकसित कर रहा हूँ। शीघ्र ही, कुछ मामलों के लिए इसे तत्व पर होने वाली घटना के कारण होने वाली किसी भी गतिविधि को रोकना चाहिए। पूर्व। इसे किसी भी ईवेंट हैंडलर को कुछ घटनाओं पर ट्रिगर करने से रोकना चाहिए। हैंडलर उपयोगकर्ताओं द्वारा संलग्न किया जा सकता है - jquery या इनलाइन तकनीक का उपयोग कर। – glaz666

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