代码之家  ›  专栏  ›  技术社区  ›  Hailwood

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

  •  2
  • Hailwood  · 技术社区  · 13 年前

    目前我有

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

    我想做的是,

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

    一旦500米跑完了, 运行 $('#output').text($(this).text());

    我该如何处理超时时间?

    1 回复  |  直到 13 年前
        1
  •  6
  •   Nick Craver    13 年前

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

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

    这是什么节目 keyup 它在运行前设置500毫秒的延迟 $('#output').text($(input).text()) ,如果在此之前按下另一个键,它将取消计时器并启动另一个…因此它将在空闲500毫秒后运行。也可以使用 $.data() 要将计时器存储在特定元素上,此通用解决方案适用于页面上任意数量的元素。


    作为旁白,你的 $('document').ready() 应该是 $(document).ready() 或者更短的 $(function() { 就像我上面说的, "document" (在引号中)不必要地运行选择器。