基础6使用Ajax遵守自定义验证 使用基金会6遵守,我创建了一个自定义验证器,需要检查一个用户名字段反对一个模式,也有它接触到服务器,看看用户名是否已经注册。当执行自定义验证器时,它首先根据regex模式测试用户名——如果成功,它将执行对服务器的ajax调用,以查看用户名是否存在。由于javascript不等待,因此自定义验证器函数返回“true”,表示一切正常。当ajax调用完成时,如果找到用户名,它将调用字段上的“addErrorClasses”。这工作得很好,但是我担心,因为验证器之前返回“true”,因为它不想等待ajax,所以现在无法返回“false”,表单会认为它处于有效状态

基础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();

问题:调用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;
};

是,通过调用addErrorClasses将该控件标记为“无效”,但这取决于调用该方法的位置和方式

由于您正在执行ajax(即异步),因此默认情况下它返回true。到那时,您的控件将是“有效”的,当ajax收到来自“url”的响应时,它将根据您的代码设置为“无效”

当您尝试提交表单时,基础框架重置所有控件,即删除所有“数据无效”属性,然后执行所有默认和自定义验证器。您的方法仍然返回true。它不会等待ajax的响应


即使控件中有错误,也会提交表单。

通过调用addErrorClasses将该控件标记为“无效”,但这取决于调用方法的位置和方式

由于您正在执行ajax(即异步),因此默认情况下它返回true。到那时,您的控件将是“有效”的,当ajax收到来自“url”的响应时,它将根据您的代码设置为“无效”

当您尝试提交表单时,基础框架重置所有控件,即删除所有“数据无效”属性,然后执行所有默认和自定义验证器。您的方法仍然返回true。它不会等待ajax的响应

即使控件中有错误,也会提交表单