【问题标题】:Javascript excecute function after 500 ms, but return on keypressJavascript 在 500 毫秒后执行函数,但在按键时返回
【发布时间】:2015-06-23 11:04:55
【问题描述】:

我想在 500 毫秒后执行一个 javascript 函数,但不是在按下某个键时执行,如下所示:

jQuery(function($) {
    $('.class').keyup(function(Key) {
         setTimeout(function(){
              // excecute this not when any key is pressed
         },500)
    })
})

【问题讨论】:

  • 如果在您的函数应该运行时(500 毫秒后)某个键按下,您是要完全取消它,还是要等到没有按键被按下再执行它?

标签: javascript jquery return settimeout


【解决方案1】:

如果在下一个 keyup 事件期间还没有经过 500 毫秒,您需要将超时标识符存储在某处并清除它。将此id保存在相关输入的data属性中很方便:

$('.class').keyup(function (Key) {
    clearTimeout($(this).data('timeout'));
    $(this).data('timeout', setTimeout(function () {
        alert('pressed');
    }, 500));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="class" placeholder="Type something">

【讨论】:

  • 很好的idea使用data-属性,我的upv...我会开始这样做!
【解决方案2】:

我相信您希望一些代码在您按下一个键后运行,而不是在按下另一个键时运行。在这种情况下,将函数存储在变量中并在按键时将其清除。

jQuery(function($) {
    var timed;

    $('.class').keyup(function(Key) {
         timed = setTimeout(function() {
            //code 
         }, 500);
    });

    $(window).keydown(function() {
         clearTimeout(timed);
    });
});

【讨论】:

  • clearTimeout 不能那样工作。它期望参数是 setTimeout 的返回值
猜你喜欢
  • 2019-07-08
  • 2012-09-19
  • 2015-11-19
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多