2012-02-19 9 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> 
私のスクリプトで

この

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

私はuntmr()内の変数untoを宣言したとき、それはunmsg()の実行を遅延していない、と私はグローバルにそれを変更したときに、それが完全に実行を停止。うーん。

+0

引用符を使用:=のsetTimeoutがたに( "unmsg(msg)"、1500); – hackartist

+0

@hackartist: 'setTimeout'に文字列を渡すことはお勧めできません(https://developer.mozilla.org/en/DOM/window.setTimeout#section_2)。 – josh3736

答えて

0

試してみてください。

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

あなたがuntoに割り当てることができる前に、あなたはそれを宣言する必要があります。

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

、あなたはunmsgを呼んでいるので、setTimeoutに渡される機能を返す必要があります...のsetTimeoutはJavaScript周り

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

これは私のdocument.ready関数で宣言されています – buck54321

+0

@ buck54321:あなたの宣言は 'untmr'がアクセスできない可変スコープにあります。 'untmr'を' ready() 'コールバックに入れるか、' unto'をグローバルにします。 –

+1

これはチケットです。ありがとう。 – buck54321

関連する問題