基础6使用Ajax遵守自定义验证 使用基金会6遵守,我创建了一个自定义验证器,需要检查一个用户名字段反对一个模式,也有它接触到服务器,看看用户名是否已经注册。当执行自定义验证器时,它首先根据regex模式测试用户名——如果成功,它将执行对服务器的ajax调用,以查看用户名是否存在。由于javascript不等待,因此自定义验证器函数返回“true”,表示一切正常。当ajax调用完成时,如果找到用户名,它将调用字段上的“addErrorClasses”。这工作得很好,但是我担心,因为验证器之前返回“true”,因为它不想等待ajax,所以现在无法返回“false”,表单会认为它处于有效状态
问题:调用addErrorClasses函数是否会将字段标记为无效,从而使表单处于无效状态基础6使用Ajax遵守自定义验证 使用基金会6遵守,我创建了一个自定义验证器,需要检查一个用户名字段反对一个模式,也有它接触到服务器,看看用户名是否已经注册。当执行自定义验证器时,它首先根据regex模式测试用户名——如果成功,它将执行对服务器的ajax调用,以查看用户名是否存在。由于javascript不等待,因此自定义验证器函数返回“true”,表示一切正常。当ajax调用完成时,如果找到用户名,它将调用字段上的“addErrorClasses”。这工作得很好,但是我担心,因为验证器之前返回“true”,因为它不想等待ajax,所以现在无法返回“false”,表单会认为它处于有效状态,ajax,zurb-foundation,abide,Ajax,Zurb Foundation,Abide,问题:调用addErrorClasses函数是否会将字段标记为无效,从而使表单处于无效状态 Foundation.Abide.defaults.validators.validate_username = function($el,required,parent) { // parameter 1 is jQuery selector if (!required) return true; let val = $el.val();
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;
};
是,通过调用addErrorClasses将该控件标记为“无效”,但这取决于调用该方法的位置和方式 由于您正在执行ajax(即异步),因此默认情况下它返回true。到那时,您的控件将是“有效”的,当ajax收到来自“url”的响应时,它将根据您的代码设置为“无效”
当您尝试提交表单时,基础框架重置所有控件,即删除所有“数据无效”属性,然后执行所有默认和自定义验证器。您的方法仍然返回true。它不会等待ajax的响应
即使控件中有错误,也会提交表单。通过调用addErrorClasses将该控件标记为“无效”,但这取决于调用方法的位置和方式 由于您正在执行ajax(即异步),因此默认情况下它返回true。到那时,您的控件将是“有效”的,当ajax收到来自“url”的响应时,它将根据您的代码设置为“无效”
当您尝试提交表单时,基础框架重置所有控件,即删除所有“数据无效”属性,然后执行所有默认和自定义验证器。您的方法仍然返回true。它不会等待ajax的响应
即使控件中有错误,也会提交表单