为了账号安全,请及时绑定邮箱和手机立即绑定

如何将.keyup()处理程序推迟到用户停止键入?

如何将.keyup()处理程序推迟到用户停止键入?

SMILET 2019-06-15 17:14:35
如何将.keyup()处理程序推迟到用户停止键入?我有一个搜索区域。现在它会搜索每一个按键。因此,如果有人键入“Windows”,它将使用Ajax搜索每一个键:“W”、“Wi”、“Win”、“Wind”、“Windo”、“Window”、“Windows”。我希望有一个延迟,所以它只搜索当用户停止输入200毫秒。中没有此选项。keyup我试过了setTimeout但没有用。我怎么能这么做?
查看完整描述

3 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

如果要在类型完成后搜索,请使用全局变量来保存从setTimout调用并取消它clearTimeout如果它还没有发生,那么它就不会触发超时,除非在最后一次keyup事件

var globalTimeout = null;  $('#id').keyup(function(){
  if(globalTimeout != null) clearTimeout(globalTimeout);  
  globalTimeout =setTimeout(SearchFunc,200);  }   function SearchFunc(){  
  globalTimeout = null;  
  //ajax code}

或者使用匿名功能:

var globalTimeout = null;  $('#id').keyup(function() {
  if (globalTimeout != null) {
    clearTimeout(globalTimeout);
  }
  globalTimeout = setTimeout(function() {
    globalTimeout = null;  

    //ajax code

  }, 200);  }


查看完整回答
反对 回复 2019-06-15
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

另一个轻微的增强CMS的答案。要方便地允许单独的延迟,可以使用以下方法:

function makeDelay(ms) {
    var timer = 0;
    return function(callback){
        clearTimeout (timer);
        timer = setTimeout(callback, ms);
    };};

如果您想重用相同的延迟,只需执行

var delay = makeDelay(250);$(selector1).on('keyup', function() {delay(someCallback);});
$(selector2).on('keyup', function() {delay(someCallback);});

如果你想要单独的延迟,你可以

$(selector1).on('keyup', function() {makeDelay(250)(someCallback);});
$(selector2).on('keyup', function() {makeDelay(250)(someCallback);});


查看完整回答
反对 回复 2019-06-15
  • 3 回答
  • 0 关注
  • 471 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信