onkeup后javascript延迟

时间:2012-11-23 21:41:21

标签: javascript jquery events

所以引用这个: How to delay the .keyup() handler until the user stops typing?

我想出了以下代码。但它什么都没做......有什么建议吗?

如果用户进一步输入内容,我试图取消setTimeout,这样就不会发生多个警报,只有当用户最终“停止”(希望如此)时才会发生警报。

谢谢!

var t = 0;  
$('input').keyup(function(){
    clearTimeout(t);
    t = setTimeout(alert($('input').val()),1000);
}

3 个答案:

答案 0 :(得分:2)

替换

t = setTimeout(alert($('input').val()),1000);

t = setTimeout(function(){alert($('input').val())},1000);

您将输入的值传递给setTimeout,而setTimeout需要一个函数(或者它可以作为代码计算的字符串)作为第一个参数。

并将最后一行替换为});,以便代码编译。

Demonstration

答案 1 :(得分:1)

您无法获取元素列表的.val()。 $('input')在屏幕上选择所有输入,并且只会给出列表中第一个的值。

此代码应适用于所有输入,但仅对触发事件的那个输入执行超时。

var t = 0;  
$('input').keyup(function(){
    var that = this;

    clearTimeout(t);
    t = setTimeout(function() {
        alert($(that).val());
    }, 1000);
}

我希望这有帮助!

答案 2 :(得分:0)

为防止对多个不同输入造成混淆,请使用this引用,在data()中保持超时:

var out = $('#out');
$('input').keyup(function() {
    var $this = $(this);
    clearTimeout($this.data('timeout'));
    $this.data('timeout', setTimeout(function() {
        out.append($('<div>').text(($this.attr('id') + ': ' + $this.val())));
    }, 1000));
});​

demo