此功能有效(挂起呼叫),但搜索值未更新。如果输入“ hello”,则传递给函数($(this).val())的值为“ he”。有没有一种方法可以更新它的键值,使其通过整个搜索?

$('#search').keyup(function () {

  if ($(this).val().length > 1) {
    var searchthis = $(this).val()

    if (srun === 1 && stimer) {
      if (stimer) {
        window.clearTimeout(stimer)
      }

    } else {
      srun = 1
      var stimer = setTimeout(loadsearch(searchthis), 2000)
    }
  }

})


loadsearch()将var srun设置为0;

最佳答案

显然,未设置srun时只会调用一次loadSearch。您应该像这样组织代码

//put timer outside
var stimer;
$('#search').keyup(function(e) {
    if ($(this).val().length <= 1) {
        return;
    }

    var searchthis = $(this).val();

    window.clearTimeout(stimer);

    stimer = setTimeout(function() {
        loadsearch(searchthis);
    }, 2000);
});


setTimeout期望第一个参数是可调用的函数,因此setTimeout(function(){})

如果您输入setTimeout(loadsearch(searchthis)),它将直接执行loadSearch函数,而无需等待2秒。

08-28 20:23