我不得不说,首先,我从未使用过 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
,如果它接受一个自定义函数,而不是只检查它的一个参数是否已被填充。