3

我正在使用 Position Absolute 的表单验证引擎。

我有一个特定的验证案例,我希望这可以为我解决。我需要能够根据另一个字段的值创建一个字段。

例如:

If country.dropdown = "USA", then state.dropdown is required.  

或者

If country.dropdown <> 'USA" then state.dropdown is not required.

您认为 JQuery Validation Engine 可以做到这一点吗?如果是这样,你能指出我正确的方向吗?

4

1 回答 1

1

我不得不说,首先,我从未使用过 Position Absolute 的表单验证引擎,但我对它感兴趣,阅读了你的问题。从文档(https://github.com/posabsolute/jQuery-Validation-Engine)看来,您必须创建一个自定义验证函数。

我在这里创建了一个工作小提琴:http: //jsfiddle.net/5pKjW/6/

即使它有效,我也不完全满意,因为第 584 行的验证引擎中存在这种情况,因此需要一个“哨兵值”。

// If the rules required is not added, an empty field is not validated
if(!required && field.val() == "" && !errorMsg) options.isError = false; 

这是带有自定义功能的选择标记:

<select class="validate[funcCall[checkCountry]]" type="text" name="state" id="state">
    <option value="none" ></option>
    <option value="CALIFORNIA" >CALIFORNIA</option>
    <option value="NEW ENGLAND" >NEW ENGLAND</option>
    <option value="TEXAS" >TEXAS</option>
</select>

这是验证器初始化:

jQuery("#formID").validationEngine({
    'customFunctions': {
        'checkCountry': function (field, rules, i, options){
            if ($('#country').val() === 'USA' && field.val() === 'none') {
                return options.allrules.required.alertText;
            }
        }
    }
});

1) 首先,您必须定义一个验证函数,它可以是全局的,也可以作为插件的参数传递(就像我在上面所做的那样)。自定义函数接受以下输入:字段、规则、i、选项。您没有对表单的引用,您只有对当前字段的引用。因此,如果您想访问另一个字段,您必须像往常一样使用 jQuery 选择它(在示例中: $('#country') )。

2)您检查验证条件。在示例中,如果出现以下情况,它将失败:

$('#country').val() === 'USA' && field.val() === 'none'

如果不遵守条件,该函数必须返回一个字符串。在示例中,我在 options.allrules.required 中返回了标准消息。该文档解释了如何为自定义函数定义自定义消息。

如您所见,由于

if(!required && field.val() == "" && !errorMsg) options.isError = false;

在验证引擎的行中,开发人员被迫使里面的条件if失败,并且将所需条件设置为 true 或将错误消息设置为 falsy 值是不正确的。所以,唯一的办法就是制作field.val() != ''. 出于这个原因,标记中的第一个选项元素具有标记值none,而不是空的。这不是一个干净的解决方案,甚至可能无法轻松实现(我不知道您是否自己生成标记(如果不这样做,事情会变得更加困难,您需要通过 javascript 操作表单,在验证引擎初始化之前))。

这不是一个干净的解决方案。一个更好的解决方案是使用condRequired,如果它接受一个自定义函数,而不是只检查它的一个参数是否已被填充。

于 2012-07-16T23:41:13.883 回答