indexOf для пользовательского правила проверки jquery - PullRequest
1 голос
/ 08 июля 2010

Я получил большую помощь здесь на днях и надеюсь, что еще раз получу ответ, который мне нужен, потому что я сейчас застрял.У меня есть форма, которая имеет текстовый ввод (#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"
                }

1 Ответ

0 голосов
/ 08 июля 2010

Причина этого в том, что вы проверяете часть имени на полное имя.Пока целевая строка содержит последовательные символы, совпадающие с тестовой строкой, будет совпадать.

Например:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...