2011-02-18 3 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

그냥 작은 실수 전자 메일이 정의되지 않았습니다. – einstein

+0

이제 해결 되었습니까? –

답변

5

당신은 debouncer를 요구하는 것처럼 들립니다. 용어는 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를 플러그인이 있습니다

0

이 어디 자바 스크립트에 email 변수를 정의 하는가?

어딘가에 email을 정의한 다음 스크립트가 작동하는지 확인해야합니다.

var email = $(this).value; // Pseudo-code - are you using jQuery? 
관련 문제