2012-10-31 9 views
6

Tôi đang cố gắng sử dụng UnderscoreJS và phương thức _.debounce() để dừng chức năng gọi lại để kích hoạt lặp lại trên sự kiện khóa bàn phím. Tôi làm điều đó vì mỗi lần bạn bắt đầu nhập, cuộc gọi AJAX sẽ được kích hoạt để có thể thực hiện cuộc gọi cho mỗi ký tự bạn nhập (:Sử dụng phương thức _.debounce() của Underscore

Đây là cách tôi đang sử dụng phương pháp:

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

Nhưng dường như nó không hoạt động vì không có gì kích hoạt nữa, nhưng nếu tôi xóa phương thức mã của tôi hoạt động tốt (: Điều gì có thể xảy ra trong đó? Tôi làm sai hoặc sáng

Trả lời

16

Ý tưởng là để loại bỏ chính cuộc gọi lại tự động. Cách đó mã của bạn chỉ phản ứng với khóa cuối cùng mà người dùng đã nhập trước khi ngừng nhập. một cái gì đó như:

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

nếu bạn muốn chỉ xóa mã khóa cụ thể thì sao? Cuộc gọi debounce bên trong câu lệnh switch (như '_.debounce (myFunction, 100);') dường như không hoạt động, 'myFunction' không bao giờ được gọi là – zok

+0

ok đã nhận nó: https://stackoverflow.com/questions/24306290/lodash-debounce-not-working-in-anonymous-function – zok