javascript / jQuery setTimeout和clearTimeout不起作用

时间:2012-02-19 02:19:45

标签: php javascript jquery ajax

这是一个总的noob问题。抱歉。我正在使用jQuery和ajax与php后端来检查keyup上用户名的可用性。我的形式是这样的。

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

当我在unto中声明变量untmr()时,它没有延迟unmsg()的执行,当我将其更改为全局时,它完全停止执行。嗯。

2 个答案:

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