这是一个总的noob问题。抱歉。我正在使用jQuery和ajax与php后端来检查keyup上用户名的可用性。我的形式是这样的。
Username <input id="uName" type="text" maxlength="20" name="username" /><br />
<span id="uNMessage"> </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(' ');
}
}
});
}
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;
});
当我在unto
中声明变量untmr()
时,它没有延迟unmsg()
的执行,当我将其更改为全局时,它完全停止执行。嗯。
答案 0 :(得分:1)
在分配给unto
之前,您需要声明它。
var unto;
function untmr(msg){
clearTimeout(unto);
unto = setTimeout(unmsg(msg),1500);
}
由于您正在调用 unmsg
,因此需要返回一个传递给setTimeout
的函数...
function unmsg(msg){
return function() { $('#uNMessage').html(msg); }
}
答案 1 :(得分:0)
尝试:
function untmr(msg){
clearTimeout(unto);
unto = setTimeout(function(){unmsg(msg);} ,1500);
}