所以这就是问题所在。我有一个使用JörnZaefferer的jQuery Validation插件验证的表单。除了一个组件,即远程验证,我的验证工作正常。实际上,远程验证确实有效但不是预期的。当我在用户名输入中输入一些数据并“聚焦”时,数据在服务器上验证,并且根据用户名可用性,服务器以字符串true或false响应。现在,在客户端,我希望验证插件根据服务器的响应将“错误”或“有效”类添加到输入元素。插件在从服务器收到错误的响应字符串时会添加“错误”类,但在收到真正的响应字符串时无法添加“有效”类。
如果在用户名输入内部点击并第二次关注,请添加神秘感,瞧!有效的类被添加。需要注意的一点是:由于输入字段数据没有改变,远程Ajax验证不会在第二个焦点上运行。插件只是根据从服务器收到的最后一个响应(我认为)来添加类。怪异。
最初,我认为问题可能是异步Ajax造成的。但我把它改为同步。问题持续存在。我已经在Firebug控制台中彻底检查了服务器的响应。我可以看到“真”或“假”字符串(没有引号)作为回应。
我还添加了errorLabelContainer(虽然我不需要它)来检查它是否正在接收任何内容。在这里,错误时errorLabelContainer选择器收到错误消息,但成功时它仍然是空白。
我需要设置有效的类,因为我用它来改变CSS中的输入背景以便向用户显示视觉指示。
这是我的验证码:
$('.registration-form').validate({
debug : true,
onkeyup : false,
errorLabelContainer: '.message-box',
onfocusout : function(element) { var isvalid = $(element).valid(); console.log(isvalid); },
rules : { username : { required: true, alphanumeric: true, minlength: 3, remote: { url : ajaxVars.ajaxurl,
type :'POST',
async : false,
cache : false,
timeout : 5000,
data : { action: 'check_username',
username: function() { return $('input[name="username"]').val(); },
_ajax_nonce: ajaxVars._ajax_nonce
}
}
},
email : { required: true, email: true, remote: { url : ajaxVars.ajaxurl,
type :'POST',
async : false,
cache : false,
timeout : 5000,
data : { action: 'check_email',
email: function() { return $('input[name="email"]').val(); },
_ajax_nonce: ajaxVars._ajax_nonce
}
}
},
password : { required: true, minlength: 5 },
}, // end rules
messages : { username : { required : 'Please enter a username.',
alphanumeric : 'Your username must be atleast 3 characters long and must only include alphabets, numbers or an underscore.',
minlength : 'Your username must be atleast 3 characters long and must only include alphabets, numbers or an underscore.',
remote : 'This username is already taken!'
},
email : { required : 'Please enter an email address.',
email : 'Please enter a valid email address.',
remote : 'This email is already registered!'
},
password : 'Please provide a password for your new account. The password must be atleast 5 characters long.',
}, // end messages
submitHandler : function(form) {
$(form).ajaxSubmit({
success : show_reg_response,
url : ajaxVars.ajaxurl,
type : 'POST',
timeout : 10000,
clearForm : true,
resetForm : true
});
} // end submitHandler
});
答案 0 :(得分:0)
我遇到了与你相同的问题,我目前的解决方案是用单独的ajax.call替换远程验证来执行我的验证逻辑(稍微不方便,因为我应该在适当的时候实现show / hide方法)。
答案 1 :(得分:0)
只是为了傻笑,在遥控器上添加一个完整的回调
complete: function(data){
$("#field_id").valid();
}
这解决了我的问题,不确定它是否适合您,具体取决于您的其余代码。 我正在使用与您类似的一组代码。
希望有所帮助
Ť