使用javascript / jQuery在2秒后触发事件

时间:2013-12-23 10:34:19

标签: jquery timer keyevent

我有类似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秒钟通过   在测试中进行搜索

所以你可以看到, 搜索操作仅在按键后两秒内没有按键(或粘贴等)时执行。

我的基本想法是。

on keydown 调用设置超时的函数, 该函数还设置一个包含文本框中最后一个条目的变量。 当超时到期时,它会检查框中的值,看它是否与变量中的值匹配。

3 个答案:

答案 0 :(得分:7)

更新:这是2秒时的去抖(等待2秒):fiddle

$('#search').keyup( debounce(function() {
       console.log('Search keypress');
        var text = $('#search').val();

        $('#textTobeSearched').text(text); 
    }, 2000));

使用setTimeout

$('#search').keypress(function() {
    setTimeout(function() {
        console.log('search keypress');
    }, 2000);
});

答案 1 :(得分:7)

使用超时去除它:

{顺便说一句,使用keyup事件代替按键,删除键不会触发按键事件,请参阅:http://www.quirksmode.org/js/keys.html}

DEMO

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