如何在 jQuery keyup 事件中实现 debounce fn?

2024-04-20

计算基于用户输入,标准是使用keyup而不是change or blur.

问题是代码在每次击键时都会触发,而我需要它在 500 毫秒超时后仅延迟并触发一次。我下面的例子显然不起作用,附加了小提琴。

我找到了大卫·沃尔什的dbounce功能,但不知道如何实现它。

jsFiddle http://jsfiddle.net/kkoosvro/

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 http://jsfiddle.net/bjb9s2w5/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 jQuery keyup 事件中实现 debounce fn? 的相关文章

随机推荐