我正在使用Position Absolute的表单验证引擎。
我有一个特定的验证案例,我希望这可以为我解决。我需要能够根据另一个字段的值创建一个字段。
例如:
If country.dropdown = "USA", then state.dropdown is required.
或
If country.dropdown <> 'USA" then state.dropdown is not required.
您认为JQuery Validation Engine可以实现吗?如果是这样,你能指出我正确的方向吗?
答案 0 :(得分:1)
我必须说,首先,我从未使用过Position Absolute的Form验证引擎, 但我对阅读你的问题感兴趣。 从文档(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)首先,您必须定义一个可以是全局的验证函数,或者可以作为插件的参数传递(如上所述)。自定义函数接受此输入:field,rules,i,options。 您没有引用该表单,您只能引用当前字段。 因此,如果你想访问另一个字段,你必须像往常一样用jQuery选择它(在例子中:$('#country'))。
2)检查验证条件。在示例中,如果出现以下情况则失败:
$('#country').val() === 'USA' && field.val() === 'none'
如果不遵守该条件,则该函数必须返回一个String。在示例中,我返回了options.allrules.required中的标准消息。该文档解释了如何为自定义函数定义自定义消息。
如你所见,因为
if(!required && field.val() == "" && !errorMsg) options.isError = false;
验证引擎中的行,开发人员被迫使if
内的条件失败,并将所需条件设置为true或将错误消息设置为假值不正确。所以,唯一的方法是制作field.val() != ''
。
因此,标记中的第一个选项元素具有标记值none
,而不是空。它不是一个干净的解决方案,甚至可能无法轻松实现(我不知道你是否自己生成了标记(如果你不这样做,事情变得更加困难,你需要通过javascript操作表单,在验证引擎初始化之前))。
这不是一个干净的解决方案。
一个更好的解决方案是使用condRequired
,如果它只接受一个自定义函数,而不是只检查它的一个参数是否已被填充。