入力フィールドのユーザー名の可用性を自動チェックする関数を作成していましたが、この非常に奇妙なことに遭遇しました。
オートチェック機能を機能として作ったところ$(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は初めてです。ありがとうございました!!!