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></script>

于 2012-03-23T21:22:57.790 に答える