2011-09-30 32 views
5

jQuery 1.6 में ईवेंट प्रतिनिधिमंडल के साथ, आप उन घटनाओं का जवाब दे सकते हैं जो एक सामान्य माता-पिता को बुलबुले हुए हैं।jQuery कॉल इवेंट प्रतिनिधि चर निरंतर कॉल के साथ

एक नमूना कार्यान्वयन इस तरह है:

(function($){ 
    $.fn.myeventhandler = function() { 

    return this.delegate('a.next, a.prev', 'click customEvent', function (event) { 

     var target=$(event.target); 
     var bar = null; 

     if('click' == event.type) {    /*~[ call this 'a' ]~*/ 

      // handle the click event 
      $('#next-element').animate({width:'200px'},1300,function(){ 
      bar = 'value1'; 
      $('#next-element').animate({width:'100px'},1300,function(){ 
       bar = 'value2'; 
       console.log(bar); 
      }); 
      }); 

     } else if('customEvent' == event.type) { /*~[ call this 'b' ]~*/ 

      // handle the customEvent event 
      $('#my-element').animate({height:'200px'},1300,function(){ 
      bar = 'my-event1'; 
      console.log(bar); 
      }); 

     } 

     return false; 
    }); 
    } 
})(jQuery); 

संरचना इस प्रकार का वास्तव में अच्छी तरह से जब आप कई ईवेंट ट्रिगर करता है आप एक पृष्ठ पर बाध्य कर दिया है करना चाहते हैं काम कर सकते हैं। हालांकि, मैंने एक उत्सुक व्यवहार देखा है और सोच रहा है कि कोई मुझे निम्नलिखित के दायरे पर प्रकाश डाल सकता है:

यदि आप 'ए' से पहले एक चर 'var bar;' परिभाषित करते हैं और इसे 'ए' और 'ए' में उपयोग करते हैं निष्पादित करने में लंबा समय लगता है, फिर यदि 'क्लिक' दूसरी बार ट्रिगर किया जाता है, तो क्या 'बार' चर वैल्यू को फिर से सौंप दिया जाएगा या कोई नया बनाया जाएगा?

सवाल का कारण यह है कि मुझे एक 'अधूरा' एनीमेशन मिला है जिसमें एनीमेशन को पूरा होने में 1.3 सेकंड लगते हैं। यदि मैं लगातार दो क्लिक ईवेंट ट्रिगर करता हूं, तो लक्ष्य और प्रकार सही ढंग से सेट होते हैं, लेकिन दूसरी एनीमेशन पहले को प्रभावित कर रहा है और दो स्कॉप्स एक दूसरे के लिए उपलब्ध प्रतीत होते हैं।

मैंने अभी तक एनीमेशन समाप्त नहीं किया है, इसलिए मुझे जेएसफ़िल्ड में ऑनलाइन रखने के लिए एक कामकाजी सेट नहीं मिला है, लेकिन यहां गुंजाइश के लिए अंगूठे का कोई नियम है कि मुझे शोध करना चाहिए या उपलब्ध स्कोप का कुछ स्पष्ट स्पष्टीकरण किसी को मिल सकता है?

संपादित करें: ऊपर में, मैं एक स्थिति है कि मैं क्या उपयोग कर रहा हूँ करने के लिए इसी में जोड़ दिया है। उपरोक्त सरलीकृत मामले में, 'बार' का मान अभी भी लगातार 2 कॉल पर अपेक्षित मूल्य रखता है, लेकिन अधिक जटिल मामले में मैं (अभी भी) के माध्यम से काम कर रहा हूं, जब तक कि मैं विशेष रूप से कॉलबैक फ़ंक्शन में पैरामीटर पास नहीं करता, अभी भी है ऐसी स्थिति जो 2 लगातार कॉल को पैरामीटर के मान को बदलने की अनुमति दे रही है, जैसे कि कॉलबैक बाद के कॉल द्वारा बनाए गए मान को देखता है - वह मान नहीं जो तर्कसंगत रूप से अपने ट्रिगर कॉल में सेट किया गया था। यदि कोई सरलीकृत उदाहरण पर इस प्रभाव को दोहरा सकता है, तो मैं इसकी सराहना करता हूं। मैं अपने कार्यों को झुका रहा हूं ताकि जेएसफ़िल्ड उत्पन्न हो सके जो इसे दोहराता है।

धन्यवाद, एई

+0

'ए' क्या है? ? ? –

+0

हाय, इंटरस्टेलर_Coder, टिप्पणियों में 'ए' पहले को संदर्भित करता है यदि() कोड का ब्लॉक और 'बी' कोड के 'अन्य' ब्लॉक को संदर्भित करता है - क्षमा करें अगर टिप्पणियां अनुपयोगी थीं - यह बेहतर उदाहरण देने के लिए एक अच्छा उदाहरण क्या है ? – MyStream

उत्तर

1

यदि आप इसे दूसरी बार क्लिक करते हैं तो एक नया बार चर बनाया जाएगा, दोनों बार मान एक-दूसरे से स्वतंत्र होंगे। कार्रवाई में इसे देखने के लिए मैंने fiddle बनाया। दो बार तेज़ी से क्लिक करें और आप देखेंगे कि दूसरी बार बार डिफ़ॉल्ट मान लेता है, न कि प्रारंभिक बार चर के मूल्य की अपेक्षा की जाती है।

+0

यह एक अच्छा उदाहरण है (किसी बाहरी चर के साथ प्रश्न को अधिक बारीकी से मिलान करने के लिए थोड़ा संपादित किया गया है दायरा) कैसे एक कॉल दूसरे को प्रभावित नहीं करना चाहिए। मैंने अभी तक यह देखने के लिए नहीं किया है कि मैंने इसका कारण क्या किया है, लेकिन यह एक दायरे के मुद्दे की तुलना में एक त्रुटि की तरह दिख रहा है। क्या आप इस क्षेत्र में विस्तार कर सकते हैं और प्रत्येक घटना ट्रिगर पर क्या होता है, इसकी व्याख्या कर सकते हैं? क्या यह आत्मनिर्भर है? – MyStream

0

घटना वस्तु के बजाय नव विभिन्न घटनाओं, इसलिए निर्मित होने के आसपास पारित हो जाता है, 'एक' नहीं होता फिर से आवंटित किया है, लेकिन दोनों घटना कार्यों से प्रभावित होंगे।

+0

हाय @ सॉटकिन्स, मुझे यकीन नहीं है कि मैंने जो भी मतलब उसका अनुसरण किया था। यह दिलचस्प है कि http://jsfiddle.net/BHaEj/4/ लिंक (परिवर्तित) यह दिखाता है कि दूसरी घटना आने पर बार चर को ब्लिट्ज नहीं किया जाता है, और कोड में मैं अभी भी समाप्त नहीं हुआ हूं, बाद में कॉल में लूप अगर वे चर को प्रभावित कर सकते हैं। मेरे पास मेरे परिवर्तनीय नामों पर एक और जाना होगा और देखें कि खेल में कोई अलग मुद्दा है या नहीं। – MyStream

+0

ठीक है, पहेली में, आपके पास वैश्विक स्थान पर 'गिनती' है। इसलिए यह ईवेंट ऑब्जेक्ट से बिल्कुल जुड़ा हुआ नहीं है - इवेंट ऑब्जेक्ट 'गिनती' को संशोधित कर रहा है, और यही कारण है कि यह बेवकूफ उम्मीद के अनुसार काम कर रहा है।हालांकि, यदि आप क्लिक एक्शन के कॉलबैक फ़ंक्शन के भीतर 'गिनती' घोषित करते हैं, तो प्रत्येक बार क्लिक होने पर इसे फिर से घोषित किया जाएगा। ईवेंट ऑब्जेक्ट स्वयं वही है (गुणों के लिए अलग-अलग मानों के साथ), लेकिन प्रत्येक क्रिया में घोषित विशेष चर पुन: घोषित किए जाएंगे। यहां jQuery इवेंट ऑब्जेक्ट के लिए दस्तावेज़ देखें: http://api.jquery.com/category/events/event-object/ – swatkins