2015-03-09 12 views
13

Tính toán dựa trên đầu vào của người dùng và tiêu chí là sử dụng keyup thay vì change hoặc blur.Làm thế nào để triển khai debn fn vào sự kiện keyup của jQuery?

Sự cố là mã kích hoạt trên mọi lần nhấn phím và tôi cần nó để trì hoãn và chỉ kích hoạt sau một lần hết thời gian 500ms. Ví dụ của tôi dưới đây rõ ràng là không hoạt động, fiddle đính kèm.

Tôi đã tìm thấy chức năng dbounce của David Walsh, nhưng không thể tìm ra cách triển khai.

jsFiddle

HTML:

<input type="text" /> 
<input type="text" id="n2" class="num" value="17" disabled /> 
<input type="text" id="n3" class="num" value="32" disabled /> 

javascript/jQuery:

$('input').keyup(function(){ 
    var $this=$(this); 
    setTimeout(function(){ 
     var n1 = $this.val(); 
     var n2 = $('#n2').val(); 
     var n3 = $('#n3').val(); 
     var calc = n1 * n2 * n3; 
     alert(calc); 
    },500); 
}); 

//http://davidwalsh.name/javascript-debounce-function 
function debounce(func, wait, immediate) { 
    var timeout; 
    return function() { 
     var context = this, args = arguments; 
     var later = function() { 
      timeout = null; 
      if (!immediate) func.apply(context, args); 
     }; 
     var callNow = immediate && !timeout; 
     clearTimeout(timeout); 
     timeout = setTimeout(later, wait); 
     if (callNow) func.apply(context, args); 
    }; 
}; 

Trả lời

20

Sử dụng nó như thế này: -

$('input').keyup(debounce(function(){ 
     var $this=$(this); 
     //alert($this.val()); 
     var n1 = $this.val(); 
     var n2 = $('#n2').val(); 
     var n3 = $('#n3').val(); 
     var calc = n1 * n2 * n3; 
     alert(calc); 
    },500)); 

Fiddle

+2

hehe nhờ hạnh phúc mã hóa :-) – squiroid

+1

Vì vậy, câu trả lời cho thấy làm thế nào để sử dụng một chức năng mà không thuộc về JS thư viện tiêu chuẩn và có thực hiện không được cung cấp: -S – zerkms

+1

lớn, điều này làm việc cho tôi với gạch của '_.debounce()'. – nnyby

Các vấn đề liên quan