2012-02-19 2 views
-1

이것은 멍청한 문제입니다. 죄송합니다. 나는 PHP 백엔드와 함께 jQuery와 ajax를 사용하여 키 업에 대한 사용자 이름의 가용성을 확인하고있다. 나는 이것을 나의 형태로 가진다. 내 스크립트에 javascript/jQuery setTimeout 및 clearTimeout이 작동하지 않습니다.

Username <input id="uName" type="text" maxlength="20" name="username" /><br /> 
<span id="uNMessage">&nbsp;</span> 

이는 나는 unmsg()의 실행을 지연하지 않았다 untmr() 내에서 변수 unto를 선언

function unchk(){ 
    $('#uName').keyup(function(){ 
     var ab = $(this); 
     if(ab.val().length > 4){ 
      $.ajax({url: "/php/username-check.php",type:'post',data:{username:$(this).val()}, 
       success: function(result){ 
        if(result == 0){ 
         ab.css("outline-color","red"); 
         untmr('Username Already Taken'); 
        } 
        else if(result == 1){ 
         ab.css("outline-color","#42c43b"); 
         $('#uNMessage').html('&nbsp;'); 
        }    
       } 
      }); 
     } 
     else{ 
      $(this).css("outline-color","red"); 
     } 
    }); 
}//END FUNCTION UNCHK 
function untmr(msg){ 
    clearTimeout(unto); 
    unto = setTimeout(unmsg(msg),1500); 
} 
function unmsg(msg){ 
    $('#uNMessage').html(msg); 
} 
$(document).ready(function(){ 
    unchk(); 
    var unto; 
}); 

때, 나는 글로벌로 변경하는 경우, 그것은 모두 실행 중지. 흠.

+0

사용 시세 : =에서는 setTimeout에게 ("unmsg (msg)", 1500); – hackartist

+0

@hackartist :'setTimeout'에 문자열을 건네주는 것은 권장하지 않습니다. (https://developer.mozilla.org/en/DOM/window.setTimeout#section_2). – josh3736

답변

0

시도 : 당신이 unto에 할당하기 전에

function untmr(msg){ 
    clearTimeout(unto); 
    unto = setTimeout(function(){unmsg(msg);} ,1500); 
} 
1

, 당신은 그것을 선언해야합니다.

var unto; 
function untmr(msg){ 
    clearTimeout(unto); 
    unto = setTimeout(unmsg(msg),1500); 
} 

하고 unmsg를 호출하고 있기 때문에, setTimeout에 전달되는 함수를 반환해야합니다 ...에서는 setTimeout에서 자바 스크립트 주위

function unmsg(msg){ 
    return function() { $('#uNMessage').html(msg); } 
} 
+0

내 document.ready 함수에서 선언했습니다 – buck54321

+0

@ buck54321 : 선언문은 'untmr'이 액세스 할 수없는 가변 범위에 있습니다. 'untmr'을'ready()'콜백에 넣거나'unto'를 전역으로 만드십시오. –

+1

그게 티켓이야. 감사. – buck54321

관련 문제