Jquery 一旦开始输入,每3秒钟检查一次输入框,直到用户停止输入-如何?

Jquery 一旦开始输入,每3秒钟检查一次输入框,直到用户停止输入-如何?,jquery,Jquery,这是我在jquery中的尝试,这种方法很有效,但有些地方出了问题,我无法解决。例如,如果我键入'ff',然后再添加两个'ff',那么会出现太多控制台日志-很难解释,但是如果运行代码并进行实验,则会调用太多的console.log $("#search-input").keyup(function () { var thisVal = $(this).val(); if(thisVal!=''){ function checker (v){

这是我在jquery中的尝试,这种方法很有效,但有些地方出了问题,我无法解决。例如,如果我键入'ff',然后再添加两个'ff',那么会出现太多控制台日志-很难解释,但是如果运行代码并进行实验,则会调用太多的console.log

$("#search-input").keyup(function () {
        var thisVal = $(this).val();
        if(thisVal!=''){
            function checker (v){
                if($("#search-input").val() !=v){
                    setTimeout(function(){checker($("#search-input").val() )}, 3000);
                }
                else{
                    console.log($("#search-input").val());
                }
            }
            setTimeout(function(){checker(thisVal)}, 3000);

        }
    });

搜索输入只是输入框。实际上,我计划进行ajax调用,而不是console.logging,但如果我能够完成上述工作,这将使我顺利完成任务。

在设置新超时之前,必须清除上一个超时:

var timeout;
$("#search-input").keyup(function () {
    var thisVal = $(this).val();
    if (thisVal) {
        function checker(v) {
            if($("#search-input").val() != v ){
                clearTimeout(timeout);
                timeout = setTimeout(function() {
                    checker($("#search-input").val() );
                }, 3000);
            } else {
                console.log($("#search-input").val());
            }
        }
        clearTimeout(timeout);
        timeout = setTimeout(function(){checker(thisVal)}, 3000);
    }
});

在设置新超时之前,必须清除上一个超时:

var timeout;
$("#search-input").keyup(function () {
    var thisVal = $(this).val();
    if (thisVal) {
        function checker(v) {
            if($("#search-input").val() != v ){
                clearTimeout(timeout);
                timeout = setTimeout(function() {
                    checker($("#search-input").val() );
                }, 3000);
            } else {
                console.log($("#search-input").val());
            }
        }
        clearTimeout(timeout);
        timeout = setTimeout(function(){checker(thisVal)}, 3000);
    }
});

一个更简单的方法,也许是一直推迟检查,直到他们停止打字一段时间。也就是说,如果计时器正在运行,请将其清除,然后重新安排检查时间以备将来使用。如果计时器曾经过期(即,用户没有在预定时间内输入框),则执行检查。三秒钟可能太长了。您可能需要500毫秒左右

var timer; // external so it's value is held over all instances of the timer function
$('#search-input').on('keyup',function() {
     if (timer) {
        clearTimeout(timer);
     }
     timer = setTimeout(function() {
         // perform your check
         console.log($('#search-input').val());
     },500);
});

一个更简单的方法,也许是一直推迟检查,直到他们停止打字一段时间。也就是说,如果计时器正在运行,请将其清除,然后重新安排检查时间以备将来使用。如果计时器曾经过期(即,用户没有在预定时间内输入框),则执行检查。三秒钟可能太长了。您可能需要500毫秒左右

var timer; // external so it's value is held over all instances of the timer function
$('#search-input').on('keyup',function() {
     if (timer) {
        clearTimeout(timer);
     }
     timer = setTimeout(function() {
         // perform your check
         console.log($('#search-input').val());
     },500);
});

你打算实施用户名可用性检查吗?不,这只是一个简单的ajax搜索。我只是不希望每次他们输入新字符时都触发搜索,因为我的web应用程序的前端使用了大量javascript编写。你打算实施用户名可用性检查吗?不,这只是一个简单的ajax搜索。我只是不希望每次他们输入新字符时都触发搜索,因为我的web应用程序前端使用了大量javascript编写。Rob,我尝试过,但问题仍然存在。前两个控制台日志工作正常,然后它以相同的输入值输出一行执行3个控制台日志。e、 g.在一秒钟内添加3'f会导致console.logged多次出现相同的值。有什么想法吗?顺便说一句,timeout必须以var作为前缀,以便代码在您尝试运行它时工作。谢谢。@Hardwerker不,它不应该加前缀
var
,以使其正常工作。这就是破坏你的密码的原因。通过前缀
var
,您在当前范围内声明了一个变量。当省略
var
时,该值将分配给变量的最接近的声明,即前缀为
var
的声明。从我的答案中复制粘贴代码,它将起作用。非常感谢。你的代码运行得很好,我正在选择你的答案。Rob,我试过了,但问题仍然存在。前两个控制台日志工作正常,然后它以相同的输入值输出一行执行3个控制台日志。e、 g.在一秒钟内添加3'f会导致console.logged多次出现相同的值。有什么想法吗?顺便说一句,timeout必须以var作为前缀,以便代码在您尝试运行它时工作。谢谢。@Hardwerker不,它不应该加前缀
var
,以使其正常工作。这就是破坏你的密码的原因。通过前缀
var
,您在当前范围内声明了一个变量。当省略
var
时,该值将分配给变量的最接近的声明,即前缀为
var
的声明。从我的答案中复制粘贴代码,它将起作用。非常感谢。你的代码运行得很好,我正在选择你的答案。