2011-02-18 14 views
3

キーを押さないとAJAXコールを起動するタイマーです。キーが押された場合、最後のタイマーを中止し、新しいタイマーを追加します。それは私がしたいことですが、成功しませんでした。ここに私のコードです:入力が終了するまでコールバックが実行されないようにします。

var t; 
input.onkeyup = function(){ 
    $('.confirmText').html('Checking...'); 
    var timeStampObj = new Date() 
    var timeStamp = timeStampObj.getTime(); 
    var oldTimeStamp = $(this).attr('timeStamp');//I store a timeStamp in the element 
    if(timeStamp < 500 + oldTimeStamp){ 
     $(this).attr('timeStamp', timeStamp); 
     clearTimeout(t); 
    } 
    t = setTimeout(function(){ 
     $.ajax({ 
      url: 'serverScripts/settings/checkEmailAvailability.php', 
      data: 'email='+email, 
      success: function(text){ 

      if(text == 'available'){ 
       $('.confirmText').html('Available!'); 
      }else{ 
       $('.confirmText').html('Occupied!'); 
       } 
      } 
     }); 
    }, 500);//Half a second 
    $(this).attr('timeStamp', timeStamp); 
} 
+0

[OK]マイナーミスマックメールが定義されていません – einstein

+0

これは今解決されましたか? –

答えて

5

あなたはデバウンサーを求めているようですね。用語comes from electronics。複数のイベントが一定の時間内に発生するのを防ぐ方法です。次の関数を使用して、最後のイベントから所定の時間が経過した場合にのみ呼び出される新しい関数を作成できます。

function debounce(callback, timeout, _this) { 
    var timer; 
    return function(e) { 
     var _that = this; 
     if (timer) 
      clearTimeout(timer); 
     timer = setTimeout(function() { 
      callback.call(_this || _that, e); 
     }, timeout); 
    } 
} 

// requires jQuery 
$("div").click(debounce(function() { 
    console.log("tset"); 
}, 2000)); 

debounceに与えられたコールバックは限りクリックイベントが発火を保つように実行しません。

優れたUnderscore.jsライブラリがan equivalent functionが含まれており、少なくとも夫婦jQueryのプラグインがあります:あなたはJavaScriptでemail変数を定義します

0

は?

emailをどこかに定義し、スクリプトが機能するかどうかを確認する必要があります。

var email = $(this).value; // Pseudo-code - are you using jQuery? 
関連する問題