2012-01-15 7 views
8

को हटा नहीं रहा है किसी कारण से jQuery.off ('क्लिक') यहां काम नहीं कर रहा है। जब मॉडल में 'हां' बटन क्लिक किया जाता है तो दूसरा मॉडल बस पॉप अप हो जाता है। मैं क्या गलत कर रहा हूं?jQuery.off() बाध्यकारी

कोड:

$(function(){ 

    //If there are warnings on the page bind alert 
    if ($('.renewal-warning').length > 0){ 

    (function(){ 

     $('#signRentalContainer').on('click', '.renewal-warning', function(e){ 

     var buttonHandle = this; 

     //Prevent submission 
     e.preventDefault(); 

     //Show warning model 
     $.modal({ 
      content: $('#renewalWarning').html(), 
      title: "Order Renewal Warning", 
      buttons: { 
      'Yes': function(win) { $(buttonHandle).off('click').click(); }, 
      'No': function(win) { win.closeModal(); } 
      }, 
      maxWidth: 250, 
      closeButton: false 
     }); 
     }); 
    })(); 
    } 
}); 

उत्तर

10

सुंदर यकीन है कि आप इसे एक ही तत्व है, साथ ही एक ही चयनकर्ता प्रदान करने की आवश्यकता के लिए जा रहे हैं।

$('#signRentalContainer').off('click', '.renewal-warning'); 

.on() हैंडलर में, this'.renewal-warning' तत्व क्लिक किए गए, #signRentalContainer तत्व नहीं है।


इन '.renewal-warning' तत्वों के कई देखते हैं, और आप केवल एक समय में एक अक्षम करना चाहते हैं, सबसे आसान तरीका तो यह है कि यह अब चयनकर्ता से मेल खाता अपने वर्ग बदलने के लिए है।

$(this).removeClass('renewal-warning') 
     .addClass('renewal-warning-disabled'); 
+0

हालांकि इस मामले में काम करने वाले हैंडल क्यों नहीं हैं? मैंने सोचा कि jQuery ने घटना से मेल खाने के लिए गुंजाइश बदल दी है? – Steven

+0

@ स्टीवन: ओह, यही कारण है कि आप '.off() 'क्यों कर रहे हैं? मुझे लगता है कि घटना बुलबुला है। 'ऑफ() 'के बजाय, हैंडलर को' e.stopPropagation()' जोड़ने का प्रयास करें। –

+0

... या शायद यह'click() 'की वजह से है कि आप उस तत्व पर कर रहे हैं जो पहले से क्लिक किया गया था। वह वहाँ क्यों है? इसे हटाने का प्रयास करें। –

3

क्योंकि this संभाल समारोह, नहीं समारोह के संदर्भ को देखें।

कोशिश यह एक नामित समारोह बनाने, तो यह उल्लेख करने के लिए जब आप off फोन:

$("body").off("click", '#signRentalContainer', buttonHandle);

Btw, किसी भी कारण से हम unbind सीधे यहां उपयोग नहीं कर सकते?

$("#signRentalContainer").unbind("click");

+2

अनबिंड का उपयोग न करने का कारण: बस कोशिश कर रहा है jQuery टीम की सिफारिश करने के साथ चिपकने के लिए। "jQuery 1.7 के रूप में, .on() और।ऑफ() विधियों को तत्वों पर ईवेंट हैंडलर संलग्न करने और निकालने के लिए प्राथमिकता दी जाती है। "[स्रोत] (http://api.jquery.com/unbind/) – Steven

+0

@ स्टीवन इसे मिला :) – satoru

+1

@ स्टेवन" पसंदीदा ".. यह एक है शब्द मैं दस्तावेज़ीकरण पर नहीं सुनना चाहता हूं। यह करने का तरीका है या नहीं करने का तरीका .. "पसंदीदा" पागल लगता है –

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