在非活动超时后发送请求



我想写一个行为类似于谷歌翻译形式的代码。

当我在输入文本框中输入字母时,有 0.5 秒的延迟等待新输入。如果未收到新输入,则请求将发送到服务器,服务器将在输出文本框中返回结果。

我写了一些东西,但它不完整。你能帮我吗?!

$(document).ready(function(){
  $('#source').keyup(function(){
    var keyUpTime = $.now();
    setTimeout(function(){
      if($.now() - keyUpTime >= 500) {
        sendValue($('#source').val());
      }         
    },500);         
  });
});
function sendValue(str){
  $.post("ajax.php",{ sendValue: str }, function(data){
    $('#result_box').html(data.returnValue);
  }, "json");
};

这就是我想要的:

var keyUpTime = 0;                  
    var t = 0;
    var executeAfterOneSecond = false;
    $('#source').keyup(function(){
        if(executeAfterOneSecond == false){
            executeAfterOneSecond = true;
            t = setTimeout(function(){
                executeAfterOneSecond = false;
                sendValue($('#source').val());                          
                }, 600);
            }                                   
        keyUpTime = $.now();
        setTimeout(function(){
            if($.now() - keyUpTime >= 200) {
                clearTimeout(t);
                executeAfterOneSecond = false;
                sendValue($('#source').val());          
                }           
            },200);
    });

如果字母之间的间隔小于 200 毫秒,则不发送请求。如果超过 600 毫秒,并且请求尚未发送,则请求将自动转发。如果字母之间的间隔超过 200 毫秒,则发送请求。

存储您的超时,以便在发生新事件时可以覆盖它,但在没有进一步提供的情况下发送。简单地说:

var ajaxTimeout = null;
$('#source').on('keyup', function(e){
  var val = $(this).val();
  if (ajaxTimeout){
    clearTimeout(ajaxTimeout);
  }
  ajaxTimeout = setTimeout(function(){
    sendValue(val);
  }, 0.5e3); // 0.5 seconds
});

最新更新