2012-02-19 114 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