2012-10-31 17 views
6

私はUnderscoreJSを使用しようとしており、_.debounce()メソッドは、keyupイベントで繰り返し発生するコールバック関数を停止します。あなたが入力を開始するたびに、AJAXコールが起動されるので、あなたが入力した各文字を呼び出すのにかなり高価になるからです(:アンダースコアの_.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

特定のキーコードだけをデバウンスする場合はどうすればよいですか? switch文内のデバウンスコール( '_.debounce(myFunction、100);のような)は動作しないようです。' myFunction'は決して呼び出されません。 – zok

+0

ok got it:https://stackoverflow.com/questions/24306290/lodash-debounce-not-working-in-anonymous-function – zok

関連する問題