我打开一个jquery对话框,它打开非常好,这个对话框的内容是一个表单,该表单的一个输入是:
<input onkeyup="testOnKeyUp();" type="text" name="userName" id="userName">
这就是我的问题所在,假设当有人在此输入中键入一个Key时,以下代码被激活并应该运行,但它不起作用。
var validateUserNameSpan = $j('#userNameSpan');
function testOnKeyUp(){
validate(this, validateUserNameSpan, 'username');
}
function validate(field, span, property) {
if (field.value != field.lastValue) {
if (field.timer) clearTimeout(field.timer);
field.timer = setTimeout(function () {
span.value = "";
span.removeClass('error').html('checking ...');
$j.ajax({
url: '/signup/'+property,
data: property + '=' + field.value,
dataType: 'json',
type: 'post',
success: function (json) {
updateMessage(span, json.success, json.message);
if(property=="email"){
emailValid = true;
}else if(property=="username"){
userNameValid = true;
}
},
error: function() {
ajFailureInitSignup(span);
if(property=="email"){
emailValid = false;
}else if(property=="username"){
userNameValid = false;
}
}
});
}, 400);
if(userNameValid && emailValid) document.getElementById('buttonLink').onclick=null ;
field.lastValue = field.value;
}
}
我做错了什么?
我不知道,但谷歌搜索我有信息,让我觉得:
$j.ajax({
我在这个对话框里面运行(验证功能)没有被执行,为什么我这么说?因为这个对话框是在DOM中创建的,在创建之后就不会执行这个$ j.ajax。
这是真的吗?
我非常感谢任何帮助。
答案 0 :(得分:0)
好的,主要的问题是你的AJAX调用在发出后立即返回 - 这是正常的(它是ajax中的第一个'A' - 异步)。这意味着您的代码会立即继续发送到if (usernamevalid && emailvalid)
代码部分。那时变量不存在,因为AJAX调用尚未返回。所以你要比较未定义的变量,这也会失败。
您必须在ajax成功/错误处理程序中移动该比较,以便仅在ajax调用实际生成可以比较的数据时才进行比较。