2012-04-16 18 views
10

यदि ईवेंट नामस्थान हैं तो एक मूल घटना की सभी घटनाओं को सुनना संभव है?jQuery: बाइंड नेमस्पेस इवेंट

उदाहरण:

$elmt.bind("change", function (event) { 
    console.log(event); 
}); 
$elmt.trigger("change.namespace1"); 
$elmt.trigger("change.namespace2"); 

यह केवल काम करता है अगर मैं पूरी घटना नाम करने के लिए बाध्य है, लेकिन इस मैं इस स्थिति :(

+0

आप वास्तव में क्या करने की कोशिश कर रहे हैं? – Evan

+0

एक jquery प्लग-इन नामित परिवर्तन घटनाओं को ट्रिगर करता है (change.channel, change.selected और अन्य)। यदि कोई बदलाव ईवेंट ट्रिगर किया गया है तो मैं एक कार्रवाई करना चाहता हूं। मैं सभी संभावित नामस्थानों को हार्ड कोड नहीं करना चाहता हूं। –

+0

पोस्ट करने के बाद बस आपके प्रश्न पर आया [मेरा] (http://stackoverflow.com/questions/12590231/bind-to-all-namespaces-of-custom-jquery-event)। मैं यह भी जानना चाहूंगा कि यह संभव है या नहीं। – jschr

उत्तर

1

आप कर सकते हैं में नहीं पता है कि है, लेकिन यह सही नहीं है।

उदाहरण के लिए

:।

function eventHandler(event){ 
    $("#output").html($("#output").html() + "<br />" + event); 
} 

$elmt = $("#elmt"); 
$elmt.bind("change.namespace1", eventHandler); 
$elmt.bind("change.namespace2", eventHandler); 

$elmt.trigger("change.namespace1"); 
$elmt.trigger("change.namespace2"); 

JSFiddle is here

आपको घटना से नामस्थान निकालने की आवश्यकता है और उस पर स्विच करें, क्योंकि दोनों नामस्थान मूल "परिवर्तन" घटना के लिए निकाल दिए जाते हैं जिसका अर्थ है कि आपको "केवल" नामस्थान या नामस्थानों का उपयोग करने की आवश्यकता नहीं है।

मुझे आशा है कि इससे थोड़ा सा मदद मिलेगी।

1

क्रॉस-पोस्टिंग Bind to all namespaces of custom jquery event


से triggerAll बजाय trigger का प्रयास करें:

(function($) { 
    $.fn.triggerAll = function(topics, data, delimiter) { 
     return this.each(function() { 
      var $this = $(this), chain = [], t = ''; 
      delimiter = (delimiter || '.'); 
      // rebuild chain 
      $.each(topics.split(delimiter), function(i,n) { 
       t += (i == 0 ? '' : delimiter) + n; 
       chain.push(t); 
      }); 

      // append/prepend original topic? 
      data = (data || []); 
      data.push(topics); 
      $.each(chain, function(i,t) { 
       $this.trigger(t, data); 
      }); 
     }); 
    }; 
})(jQuery); 

, दी की वजह से कैसे jQuery नेमस्पेसिंग ट्रिगर ट्रिगर "रूट" घटना वास्तव में namespaced संस्करणों आग संभालती , इसलिए आपको उम्मीद है कि आपको / जैसे डेलीमीटर के लिए किसी अन्य चरित्र का उपयोग करने की आवश्यकता होगी, और फिर अपनी घटनाओं की घोषणा करें:

var $o = $('#whatever'); 
// this will be triggered for all events starting with 'root' 
$o.on('root', function() { console.log(Array.prototype.slice.call(arguments, 0)); }); 
// some arbitrary way to fire custom events 
$o.on('click', function() { 
    $o.triggerAll('root/custom1/subA', ['1st', '2nd'], '/'); 
    $o.triggerAll('root/custom2', [3, 4, 5], '/'); 
}); 
+0

जो ... बिल्कुल सही नहीं है। एक सेकंड। – drzaus

+0

मूल पोस्ट से मेल खाने के लिए अपडेट किया गया। – drzaus

0

..... यह है कि मैं क्या प्रत्येक li तत्व पर मौजूदा विषय की तुलना करने और नए कस्टम विषय के साथ बदलने के लिए इस्तेमाल किया है है

$('li').each(function(index) { 
        var oT = $(this).attr('data-theme'); 
        var li_item = $(this).attr(index); 

        $('#li_item ').mousedown(function() { 

         if(oT=='a') 
         { 
          $(this).removeClass('ui-btn-up-' + a').addClass('ui-btn-up-' + 'c').attr('data-theme', 'c'); 
         } 

        }); 

        $('#li_item ').mouseup(function() { 


         if(oT=='c') 
         { 
          $(this).removeClass('ui-btn-up-' + 'c').addClass('ui-btn-up-' + 'a').attr('data-theme', 'a'); 
         } 

        }); 

});

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