所以引用这个: 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);
}
答案 0 :(得分:2)
替换
t = setTimeout(alert($('input').val()),1000);
与
t = setTimeout(function(){alert($('input').val())},1000);
您将输入的值传递给setTimeout,而setTimeout需要一个函数(或者它可以作为代码计算的字符串)作为第一个参数。
并将最后一行替换为});
,以便代码编译。
答案 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));
});