2012-08-07 18 views
20

मैं एक jQuery प्लगइन लिख रहा हूं और .on और .trigger का उपयोग अपने पब/उप सिस्टम के रूप में कर रहा हूं। हालांकि, मैं विभिन्न परिदृश्यों में कई घटनाओं को ट्रिगर करना चाहता हूं।jQuery .trigger() एकाधिक घटनाएं

क्या यह एक स्ट्रिंग के रूप में करना संभव है, जैसे .on विधि?

लक्ष्य:

$this.trigger("success next etc"); // doesn't work 

वर्तमान समाधान:

$this 
    .trigger("success") 
    .trigger("next") 
    .trigger("etc");     // works, triggers all three events 

कोई सुझाव?

उत्तर

26

JQuery ही कई घटनाओं को ट्रिगर का समर्थन नहीं करता, फिर भी आप कस्टम विस्तार विधि लिखने triggerAll

(function($) { 
    $.fn.extend({ 
     triggerAll: function (events, params) { 
      var el = this, i, evts = events.split(' '); 
      for (i = 0; i < evts.length; i += 1) { 
       el.trigger(evts[i], params); 
      } 
      return el; 
     } 
    }); 
})(jQuery); 

और वह ऐसा कह सकते हैं:

$this.triggerAll("success next etc"); 
+0

क्या प्रत्येक लूप के बजाय लूप का उपयोग करने में कोई फायदा है? –

+0

मुझे लगता है कि इस तरह के साधारण मामले के लिए कस्टम jQuery '$ .each' के बजाय नियमित रूप से इन-लूप का उपयोग करना अधिक प्रभावी है जो आपके द्वारा पारित तर्कों पर कई धारणाएं करता है। और अंत में यह अंदर के लिए करता है। – hazzik

+0

यह समझ में आता है। धन्यवाद! –

6

आपके पास क्या ठीक है ... आप अल्पविराम से अलग सूची का उपयोग करके कई ईवेंट ट्रिगर नहीं कर सकते हैं। ट्रिगर() कन्स्ट्रक्टर केवल ईवेंट हैंडलर के साथ पास करने के लिए एक ईवेंट नाम और वैकल्पिक अतिरिक्त पैरामीटर लेता है। पर

$.each($this.data('events'), function(k, v) { 
    $this.trigger(k); 
});​ 
+0

हाहा मैंने अभी कुछ इसी तरह लिखा है! किसी और को एक ही निष्कर्ष पर देखने के लिए खुशी हुई। धन्यवाद! –

+0

आप '~ ['succes', 'next', 'etc'] जोड़ सकते हैं। Index.f (k) &&' 'this.trigger (k)' की वांछित घटनाओं को फ़िल्टर करने के लिए। –

6

शायद ज़रुरत किसी और stumbles में:

एक alterternative सभी घटनाओं एक तत्व से जुड़ी को गति प्रदान करने, हालांकि, इस को अपनी आवश्यकताओं यदि आप अलग अलग senarios में विशिष्ट घटनाओं को गति प्रदान करने की जरूरत है को पूरा नहीं कर सकते हैं हो सकता है जीवन में बाद में यह प्रश्न, मैंने कस्टम jQuery फ़ंक्शन बनाकर इसे हल किया।

$.fn.triggerMultiple = function(list){ 
    return this.each(function(){ 
     var $this = $(this); // cache target 

     $.each(list.split(" "), function(k, v){ // split string and loop through params 
      $this.trigger(v); // trigger each passed param 
     }); 
    }); 
}; 

$this.triggerMultiple("success next etc"); // triggers each event 
+0

आपने पैराम का प्रचार नहीं किया था। – mpen

0

के बाद से, मुझे नहीं पता टिप्पणी करने का विशेषाधिकार है, इसलिए मैं यह इंगित करना चाहता हूं कि $this.data('events') doesn't work, आंतरिक उपयोग फ़ंक्शन का उपयोग करना होगा। $._data($this[0], 'events')

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