我正在为输入字段构建自动检查用户名可用性功能,我遇到了这个非常奇怪的事情。
当我将自动检查功能作为$(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的新手..非常感谢你!
答案 0 :(得分:0)
您获得之前的值是因为{<1}}事件在字符实际添加到文本框之前被触发了。
您应该处理keydown
事件,这是在值更新后引发的:
keyup
至于$('#username').keyup(function(){
clearTimeout(timer);
var usercheck = $(this).val();
timer = setTimeout(function () {
checkUserName(usercheck);
}, 1000);
});
无效,可能是一些语法错误导致$(document).ready()
和<script>
标记之间的整个代码失败。