2012-10-31 10 views
6

Próbuję użyć metody UnderscoreJS i metody _.debounce(), aby zatrzymać funkcję wywołania zwrotnego w celu wielokrotnego uruchamiania w zdarzeniu kluczowania. Robię tak, ponieważ za każdym razem, gdy zaczynasz pisać, wywołanie AJAX zostanie uruchomione, więc wywołanie każdego wpisywanego znaku będzie kosztowne (:Używanie metody Podkreślnik _.debounce()

Oto jak używam tej metody:

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(); 
     }); 
    }, 

ale najwyraźniej to nie działa, ponieważ nic nie jest rozpalanie już, ale jeśli usunąć metodę mój kod działa dobrze (?: Więc co może być nie tak tam robię to źle, czy jestem Tęsknię za czymś?

Odpowiedz

16

Chodzi o to, aby zrezygnować z wywołania oddzwaniania, w ten sposób twój kod reaguje tylko na ostatni klucz wpisany przez użytkownika, zanim przestał pisać. coś podobnego:

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

co zrobić, jeśli chcesz zrezygnować tylko z określonego kodu klucza? Wywołanie debounce wewnątrz instrukcji switch (np. '_.debounce (myFunction, 100);) nie działa,' myFunction' nigdy nie jest nazywane – zok

+0

ok dostałem to: https://stackoverflow.com/questions/24306290/lodash-debounce-not-working-in-anonymous-function – zok

Powiązane problemy