使用 Foundation 6 Abide,我创建了一个自定义验证器,该验证器需要根据模式检查用户名字段,并让它与服务器联系以查看用户名是否已注册。执行自定义验证器时,它首先根据正则表达式模式测试用户名 - 如果成功,则对服务器执行 ajax 调用以查看用户名是否存在。由于 javascript 不等待,自定义验证器函数返回“true”,表示一切正常。当 ajax 调用完成时,如果找到用户名,它会调用字段上的“addErrorClasses”。这工作得很好,但是我担心由于验证器之前返回“true”,因为它不想等待 ajax,所以现在没有办法返回“false”
问题:调用 addErrorClasses 函数是否会将字段标记为无效,从而使表单处于无效状态?
Foundation.Abide.defaults.validators.validate_username =
function($el,required,parent) {
// parameter 1 is jQuery selector
if (!required) return true;
let val = $el.val();
// Step 1 - check that it meets the pattern
if (!val.length)
return true;
let valid = new RegExp(username_pattern).test(val);
if (!valid)
return false;
// Step 2 - check that the username is available
$.ajax({
url: "http://localhost:3000/users/"+val,
}).done(function(data) {
$('#demo-form').foundation('addErrorClasses',$el);
console.log(data);
}).fail(function() {
// do nothing for now
});
return true;
};