仅在内容未在500毫秒内更改时才执行操作

时间:2010-11-16 09:42:52

标签: javascript jquery delay

目前我有

$('document').ready(function(){
  $('input').keyUp(function(){
    $('#output').text($(this).text());
  });
});

我想做的是,

当按键被注册等待500ms时, 如果在500毫秒内再次按下一个键, 从那个按键等待500ms。

一旦500ms过去了, 运行$('#output').text($(this).text());

我将如何管理超时?

1 个答案:

答案 0 :(得分:6)

您可以设置和清除计时器,如下所示:

$(function(){
  $('input').keyup(function(){
    clearTimeout($.data(this, 'timer'));
    var input = this;
    $.data(this, 'timer', setTimeout(function() {
      $('#output').text($(input).text());
    }, 500));
  });
});

这样做keyup它在运行$('#output').text($(input).text())之前设置了500ms的延迟,如果在此之前按下另一个键,它会取消计时器并启动另一个...所以它不会运行到500ms空闲。此外,通过使用$.data()将计时器存储在特定元素上,此通用解决方案适用于页面上的任意数量的元素。


顺便说一下,$('document').ready()应该是$(document).ready()或者像我上面那样更短$(function() {"document"(在引号中)不必要地运行选择器。