前几天我在这里得到了一些很大的帮助,希望我能再次得到我需要的答案,因为我现在已经陷入困境了。我有一个具有文本输入(#USA_sub)和两个后续文本输入(#FirstName)和(#LastName)的表单我有一个验证规则,检查每个值(#FirstName)和(#LastName)是否各自出现在(#USA_sub)中。我的工作除外:当你在(#FirstName)输入中输入正确的值时,更正它包含在(#USA_sub)中你只需输入姓氏的2个字母就可以验证。如果你跳过名字,它需要所有的姓氏。
$.validator.addMethod(
"firstSig",
function(value, element, params) {
return $(params).val().indexOf(value + ' ' + $("#LastName").val()) > -1;
},
"Your first name must be contained in your Electronic Signature."
);
$.validator.addMethod(
"lastSig",
function(value, element, params) {
return $(params).val().indexOf($("#FirstName").val() + ' ' + value) > -1;
},
"Your last name must be contained in your Electronic Signature."
);
和验证规则:
FirstName: {
required: true,
minlength: 2,
firstSig: "#USA_sub"
},
LastName: {
required: true,
minlength: 2,
lastSig: "#USA_sub"
}
谢谢!
答案 0 :(得分:0)
这样做的原因是你要根据全名测试部分名称。只要目标字符串包含与测试字符串匹配的连续字符,就会有匹配。
例如:
FirstName = Bob
LastName = Dylan
USA_sub = Bob Dylan
user has typed: Bob Dyl
匹配是因为indexOf()
Bob Dyl
Bob Dylan
==
内找到了return $(params).val() == ($("#FirstName").val() + ' ' + value);
尝试执行FirstName
搜索,如:
Bo(space)
您的Bob(space)Dylan
验证程序工作的原因是您最后在空间中连接。
Bob(space)
中找不到Bob(space)Dylan
。但FirstName
LastName
编辑:使用正则表达式测试输入开头/结尾的新版本,并消除从FirstName到LastName的交叉引用,反之亦然。
之前的版本不起作用,因为您始终在FirstName
字段上验证LastName
和FirstName
。
因此,当您切换到FirstName
字段(可能为空)时,$.validator.addMethod(
"firstSig",
function(value, element, params) {
// The regular expression represents
// beginning of input + value + space
var regex = new RegExp('^' + value + ' ');
return regex.test($(params).val());
},
"Your first name must be contained in your Electronic Signature."
);
$.validator.addMethod(
"lastSig",
function(value, element, params) {
// The regular expression represents
// space + value + end of input
var regex = new RegExp(' ' + value + '$');
return regex.test($(params).val());
},
"Your last name must be contained in your Electronic Signature."
);
的验证失败,并且在您返回{FirstName
之前不会重新验证{1}}。
我在下面做的是删除跨字段引用,并使用正则表达式,以便我们能够测试行的开头/结尾。基本上我们所拥有的是:
FirstName测试 - BeginningOfInput + FirstName + space LastName测试 - space + LastName + EndOfInput
LastName
这样,当您输入正确的{{1}}但尚未进入{{1}}字段时,您就不会收到验证失败。