2012-02-19 93 views
-1

這是一個總的noob問題。抱歉。我正在使用jQuery和ajax與php後端來檢查用戶名密鑰的可用性。我有我的形式。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在JavaScript中使用引號:對= setTimeout的( 「unmsg(MSG)」,1500); – hackartist 2012-02-19 02:21:43

+0

@hackartist:將一個字符串傳遞給'setTimeout'是[不推薦](https://developer.mozilla.org/en/DOM/window.setTimeout#section_2)。 – josh3736 2012-02-19 04:27:56

回答

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功能...

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

它在我的document.ready函數中聲明 – buck54321 2012-02-19 02:24:18

+0

@ buck54321:您的聲明位於'untmr'無權訪問的變量範圍內。要麼將'untmr'放入您的'ready()'回調函數中,要麼將''''設爲全局。 – 2012-02-19 02:26:48

+1

這是票。謝謝。 – buck54321 2012-02-19 02:32:49