我有类似jquery-run-code-2-seconds-after-last-keypress的要求。
现在,当我使用@brad
代码时,它可以正常工作: -
$('input.username').keypress(debounce(function (event) {
console.log('Search keypress');
}, 250));
但不是在: -
$('#search').keypress(function () {
debounce(function (event) {
console.log('Search keypress');
}, 2000);
});
Fiddle here。任何帮助都会非常有用。
编辑: -
最初我正在做类似下面的事情,这不是我想要的 -
$('#search').keypress(function () {
setTimeout(function () {
console.log('Search keypress');
}, 3000);
});
编辑2: - 我想要与下面非常类似的内容: - (从那里复制的文字)
在输入3个字符后的那一刻,它将在每次按键时搜索。
我想要的是
案例1:
<小时/> 案例2:
用户输入测试
2秒过去了 搜索执行
用户输入测试
1秒通过
用户按下t
2秒钟通过 搜索是在测试上进行的
案例3:
用户输入测试
1秒钟通过
用户按下t
1.5秒通过
用户按下i 1.5秒通过
用户按下n
1.5秒通过
用户按g
2秒钟通过 在测试中进行搜索
所以你可以看到, 搜索操作仅在按键后两秒内没有按键(或粘贴等)时执行。
我的基本想法是。
答案 0 :(得分:7)
更新:这是2秒时的去抖(等待2秒):fiddle
$('#search').keyup( debounce(function() {
console.log('Search keypress');
var text = $('#search').val();
$('#textTobeSearched').text(text);
}, 2000));
$('#search').keypress(function() {
setTimeout(function() {
console.log('search keypress');
}, 2000);
});
答案 1 :(得分:7)
使用超时去除它:
{顺便说一句,使用keyup事件代替按键,删除键不会触发按键事件,请参阅:http://www.quirksmode.org/js/keys.html}
var timer;
$('#search').keyup(function () {
clearTimeout(timer);
timer = setTimeout(function (event) {
console.log('Search keypress');
var text = $('#search').val();
$('#textTobeSearched').text(text);
}, 2000);
});
答案 2 :(得分:2)
debounce
返回要调用的函数。直接在keypress()
函数中使用时,返回的函数是您的事件处理程序。但是,在你的第二个代码中,你去抖动该函数但从未实际调用它。
debounce(function(event) {console.log("Search keypress");},2000)();