-1

我想编写一个行为类似于谷歌翻译表单的代码。

当我在输入文本框中输入一个字母时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");
};
4

2 回答 2

0

存储您的超时,以便在发生新事件时可以覆盖它,但如果没有进一步提供,则将其发送出去。简单地说:

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
});
于 2012-11-17T02:59:42.450 回答
0

这是我习惯的:

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);
    });

如果字母之间的间隔小于 200ms,则不发送请求。如果超过 600ms,请求还没有发送,则请求自动转发。如果字母之间的间隔超过 200 毫秒,则发送请求。

于 2012-11-20T23:36:44.147 回答