jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法


在使用 jQuery 的 formValidator 插件进行 AJAX 验证时,遇到内容未修改但离开字段时仍然提示错误的情况,通常是因为验证逻辑没有正确处理字段值未变化的情况。这里提供几种可能的解决方法:

### 方法1:在验证前检查字段值是否已更改

在自定义的验证函数中添加逻辑,检查字段的当前值是否与初始值(或上次提交的值)相同。如果相同,则不执行验证或返回验证通过。


$("#myForm").formValidator({
    onShow: function(input) {
        // 假设每个字段都有一个初始值
        var initialValue = $(input).data('initial-value');
        if ($(input).val() === initialValue) {
            // 如果当前值与初始值相同,则不提示错误
            return true; // 或者调用插件的某个方法来忽略此次验证
        }
        // 否则,执行正常的验证逻辑
    },
    // 其他验证规则...
});

// 初始化表单时,设置每个输入字段的初始值
$('#myForm input').each(function() {
    $(this).data('initial-value', $(this).val());
});

注意:上面的 `onShow` 回调可能不是 formValidator 插件的标准用法,具体取决于插件的实现。如果插件不支持这样的回调,你可能需要在自定义验证函数内部实现这个逻辑。

### 方法2:在自定义验证函数中处理

如果你使用的是自定义的 AJAX 验证函数,可以在该函数中检查字段值是否已更改。


$("#myForm").formValidator({
    defaultInvalidMessage: "验证失败,请修正!",
    fields: {
        "yourFieldName": {
            validators: {
                custom_validator: {
                    type: function(input, value) {
                        var initialValue = $(input).data('initial-value');
                        if (value === initialValue) {
                            // 如果值未变,返回true表示验证通过
                            return true;
                        }

                        // 执行 AJAX 请求以进行验证
                        // ...
                        // 假设这里有一个 AJAX 调用并返回验证结果
                        // 如果验证失败,返回false或抛出异常
                        return true; // 或根据 AJAX 结果返回 true/false
                    },
                    message: '验证失败,请检查您的输入!'
                }
            }
        }
    }
});

// 初始化表单时,设置每个输入字段的初始值
$('#myForm input').each(function() {
    $(this).data('initial-value', $(this).val());
});

### 方法3:使用插件的特定配置或事件

有些表单验证插件可能提供了特定的配置选项或事件,用于处理这类情况。查阅 formValidator 插件的文档,看是否有相关的设置或事件可以利用。

### 注意事项

- 确保你的解决方案与 formValidator 插件的版本兼容。

- 考虑到用户体验,合理设计验证逻辑,避免在用户未进行任何操作时频繁提示错误。

- 如果以上方法都不适用,可能需要考虑其他验证插件或自定义更复杂的验证逻辑。