2

我正在为输入字段构建一个自动检查用户名可用性功能,我遇到了这个非常奇怪的事情。

当我将自动检查功能作为$(document).ready()功能时,

$(document).ready(function(){
    //JohnyP keydowntimer
    var timer = null;
    $('#username').keydown(function(){
        clearTimeout(timer);
        var usercheck = $(this).val();
        timer = setTimeout(function () {
    checkUserName(usercheck);}, 1000);
    });
    //http://www.itechroom.com
    function checkUserName(usercheck){
            $('#usercheck').html('<img src="images/ajax-loader.gif" />');
            $.post("checkuser.php", {username: usercheck} , function(data){
                if (data != '' || data != undefined || data != null){
                    $('#usercheck').html(data);
                }
            });
    }
})

无论我将它放在哪里(之前</head>或之后<body>),它都无法工作。

但是,当我将函数作为 Body onload 事件 ( <body onLoad="loadthis()">)执行时

function loadthis(){
    //JohnyP keydowntimer
    var timer = null;
    $('#username').keydown(function(){
        clearTimeout(timer);
        var usercheck = $(this).val();
        timer = setTimeout(function () {
    checkUserName(usercheck);}, 1000);
    });
    //http://www.itechroom.com
    function checkUserName(usercheck){
            $('#usercheck').html('<img src="images/ajax-loader.gif" />');
            $.post("checkuser.php", {username: usercheck} , function(data){
                if (data != '' || data != undefined || data != null){
                    $('#usercheck').html(data);
                }
            });
    }
    }

它有效,但每次自动检查时,都会出现以前的结果。

例如。输入名称'Arch',消息应该是“这个用户名已经存在”,但它是“这个用户名可用”,下一个结果将是“这个用户名已经存在”不管任何事情。它始终是先前的结果。

所以我尝试将 check_user_name 函数作为onblur事件执行,一切正常,checkuser.php 没有任何问题。

谁能向我解释为什么会发生这种情况?我是 jQuery 的新手.. 非常感谢!!!

4

1 回答 1

0

您获得了先前的值,因为该事件是在字符实际添加到文本框之前keydown触发的。

您应该keyup改为处理事件,该事件在值更新后引发:

$('#username').keyup(function(){
    clearTimeout(timer);
    var usercheck = $(this).val();
    timer = setTimeout(function () {
        checkUserName(usercheck);
    }, 1000);
});

现场测试用例

至于$(document).ready()不起作用,可能是一些语法错误导致<script>and</script>标记之间的整个代码失败。

于 2012-03-23T21:22:57.790 回答