2015-03-09 9 views
13

Eine Berechnung basiert auf Benutzereingaben, und die Kriterien lauten keyup anstelle von oder blur.Wie man Debounce Fn in jQuery Keyup-Ereignis implementieren?

Das Problem ist, dass der Code bei jedem Tastendruck ausgelöst wird, und ich brauche es zu verzögern und nur einmal nach 500ms Timeout ausgelöst. Mein Beispiel unten funktioniert offensichtlich nicht, Geige angefügt.

Ich fand David Walsh dbounce Funktion, aber kann nicht herausfinden, wie man es implementiert.

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

Antwort

20

es wie folgt verwenden: -

$('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 Dank glücklich Codierung :-) – squiroid

+1

So zeigt die Antwort, wie eine Funktion verwenden, und deren Umsetzung nicht gehört Standardbibliothek JS nicht vorgesehen ist: ES – zerkms

+1

groß, das ist für mich gearbeitet mit der Unterstreichungs '_.debounce()' Funktion. – nnyby

Verwandte Themen