Причина этого в том, что вы проверяете часть имени на полное имя.Пока целевая строка содержит последовательные символы, совпадающие с тестовой строкой, будет совпадать.
Например:
FirstName = Bob
LastName = Dylan
USA_sub = Bob Dylan
user has typed: Bob Dyl
Есть совпадение, поскольку indexOf()
found Bob Dyl
в пределах Bob Dylan
Попробуйте просто выполнить поиск ==
, например:
return $(params).val() == ($("#FirstName").val() + ' ' + value);
Причина, по которой ваш FirstName
валидатор работает, заключается в том, что вы объединяетесь в пространстве вконец.
То есть Bo(space)
не найдено в Bob(space)Dylan
.Но Bob(space)
находится в Bob(space)Dylan
EDIT: Новая версия, которая использует регулярное выражение для проверки начала / конца ввода и удаляет перекрестную ссылку из FirstNameLastName и наоборот.
Предыдущая версия не работала, потому что вы всегда проверяли FirstName
и LastName
по полю FirstName
.
Из-за этого, когдаВы переходите в поле LastName
, которое, по-видимому, пусто, проверка не выполняется для FirstName
и не выполняется повторная проверка, пока вы не вернетесь к FirstName
.
Что я сделалниже было убрать ссылку на кросс-поле и использовать регулярное выражение, чтобы мы могли проверить начало / конец строки.Итак, в основном мы имеем:
Тесты FirstName для - BeginningOfInput + FirstName + пробел Тесты LastName для - пробел + LastName + EndOfInput
$.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
, но еще не попали в поле LastName
.