2012-10-31 11 views
6

का उपयोग करके मैं अंडरस्कोरजेएस का उपयोग करने की कोशिश कर रहा हूं और यह _.debounce() विधि कुंजीपटल ईवेंट पर बार-बार गोलीबारी के लिए कॉलबैक फ़ंक्शन को रोकने के लिए है। मैं ऐसा इसलिए कर रहा हूं क्योंकि हर बार जब आप टाइपिंग शुरू करते हैं, तो एक एजेक्स कॉल निकाल दिया जाएगा, इसलिए आपके द्वारा टाइप किए जाने वाले प्रत्येक चरित्र के लिए कॉल करना काफी महंगा होगा (:अंडरस्कोर की _.debounce() विधि

इस प्रकार मैं विधि का उपयोग कर रहा हूं:

onTypeEvents : function(selector, callback) { 
     return $(selector).on('keyup', function(event){ 

      var that = $(this).val().trim(); 

      switch(event.keyCode) { 
       case 8: 
        if(that !== '') { 
         if(that.length >= 2) { 
          return _.debounce(function() { callback.apply(that, [ that ]) }, 150); 
         } else { 
          return _.debounce(function() { callback.apply(null, [ null ]) }, 150); 
         }; 
        }; 
        break; 
       case 9: 
        break; 
       case 13: 
        break; 
       case 27: 
        break; 
       case 37: 
        break; 
       case 38: 
        break; 
       case 39: 
        break; 
       case 40: 
        break; 
       default: 
        if(that !== '') { 
         if(that.length >= 2) { 
          return _.debounce(function() { callback.apply(that, [ that ]) }, 150); 
         } else { 
          return _.debounce(function() { callback.apply(null, [ null ]) }, 150); 
         }; 
        }; 
        break; 
      }; 

      event.preventDefault(); 
      event.stopPropagation(); 
     }); 
    }, 

लेकिन जाहिरा तौर पर यह काम नहीं करता है क्योंकि कुछ भी नहीं अब और फायरिंग कर रहा है, लेकिन अगर मैं विधि निकालने मेरी कोड काम करता है ठीक (: तो क्या वहाँ में गलत हो रहा हो सकता है मैं गलत कर रहा हूँ या हूँ मुझे कुछ याद आ रहा है?

उत्तर

16

विचार कुंजीपटल कॉलबैक को स्वयं ही रद्द करना है। इस तरह आपका कोड केवल टाइप करने से पहले आपके उपयोगकर्ता द्वारा टाइप की गई अंतिम कुंजी पर प्रतिक्रिया करता है। कुछ ऐसा:

$(selector).on('keyup', _.debounce(function (e) { 
    switch (e.keyCode) { 
    /* your code */ 
    } 
}, 500)); 
+0

क्या होगा यदि आप केवल एक विशिष्ट कुंजी कोड को डिबॉश करना चाहते हैं? स्विच स्टेटमेंट के अंदर डिबॉन्स कॉल (जैसे '_.debounce (myFunction, 100);') काम नहीं कर रहा है, 'myFunction' को कभी भी – zok

+0

नहीं कहा जाता है ठीक है: https://stackoverflow.com/questions/24306290/lodash-debounce-नहीं काम में गुमनाम-समारोह – zok

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