-1

Google の翻訳フォームのように動作するコードを書きたいです。

入力テキスト ボックスに文字を入力すると、0.5新しい入力を待つ 2 番目の遅延があります。新しい入力が受信されない場合、要求はサーバーに送信され、出力テキスト ボックスに結果が返されます。

なんか書いたけど未完成。私たちを手伝ってくれますか?!

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

文字間の間隔が 200 ミリ秒未満の場合、リクエストは送信されません。600ms が経過してもリクエストが送信されない場合、リクエストは自動的に転送されます。文字間隔が 200 ミリ秒を超える場合、リクエストが送信されます。

于 2012-11-20T23:36:44.147 に答える