javascript – 如何实现去抖动fn到jQuery keyup事件?

前端之家收集整理的这篇文章主要介绍了javascript – 如何实现去抖动fn到jQuery keyup事件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
计算基于用户输入,标准是使用加密,而不是更改或模糊.

问题是代码在每次击键时都会触发,我需要它在500ms的超时后延迟一次.我下面的例子显然不行,小提琴.

我发现了David Walsh的dbounce功能,但是无法弄清楚如何实现它.

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

解决方法

像这样使用:
$('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

猜你在找的jQuery相关文章