Проверка jquery - вызов метода .valid () для некоторого элемента не устраняет ошибку

0

Я использую плагин проверки правильности jquery для проверки моих форм.

https://jqueryvalidation.org/

Когда я вызываю метод.valid() какого-либо элемента в другой проверке элемента, тогда сообщение об ошибке текущего элемента не удаляется.

Скажем, у меня есть элементы E1 и E2. Метод проверки для элемента E1 - это метод 1. В методе 1, если я вызываю E2.valid(), чтобы запрограммировать запуск триггера. Сообщение об ошибке в E1 не удаляется, даже если элемент действителен.

Пожалуйста, найдите код.

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Validate IP Address using jQuery</title>
    <script type="text/javascript"
    src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.min.js">
    </script>
    <script type="text/javascript" src=
"http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js">
    </script>
    <script type="text/javascript">
        $(document).ready((function() {
            $.validator.addMethod('IP1Checker', function(value) {
                $("#ip2").valid();
                return isValidIPAddress(value);
            }, 'Invalid IP address');

            $.validator.addMethod('IP2Checker', function(value) {
            return isValidIPAddress(value);
            }, 'Invalid IP address');

            $('#form1').validate({
                rules: {
                    ip: {
                        required: true,
                        IP1Checker: true
                    },
                    ip2: {
                        required: true,
                        IP2Checker: true
                    }
                }
            });

            function isValidIPAddress(value) {
            var isValid = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(value);
            if (isValid && (value === "0.0.0.0" || value === "255.255.255.255")) {
                isValid = false;
            }
            return isValid;
        }

        }));
    </script>
</head>
<body>
<form id="form1">
    <input id="ip" name="ip" type="text"  /> 
    <input id="ip2" name="ip2" type="text"  /> 
    <input id="Submit2" type="submit" value="submit" />
 </form>
</body>
</html>

Благодарю.

  • 0
    Можете ли вы предоставить скрипку.
  • 0
    Пожалуйста, введите ваш код
Показать ещё 1 комментарий
Теги:
jquery-validate

1 ответ

2
Лучший ответ

Во-первых, jQuery v1.4.2 и jQuery Validate v1.7 являются смехотворно старыми (около 2010 года) и должны обновляться.


$.validator.addMethod('IP1Checker', function(value) {
    $("#ip2").valid();  // <- you shouldn't do this
    return isValidIPAddress(value);
}, 'Invalid IP address');

Вы не должны вызывать .valid() из метода .addMethod() поскольку он может потенциально выбросить все в цикл. Метод .addMethod() предназначен только для создания нового правила проверки, а не для других функций, таких как программный запуск теста проверки. (Проверка правильности проверяет все правила для определенного поля или формы. Правило проверки оценивает одно конкретное поле в отношении одного конкретного правила.)

Вам даже не нужен специальный метод проверки IP-адресов. Просто используйте правило ipv4 которое уже встроено в файл additional-methods.js плагина.

$('#form1').validate({
    rules: {
        ip: {
            required: true,
            ipv4: true
        },
        ip2: {
            required: true,
            ipv4: true
        }
    }
});

DEMO: https://jsfiddle.net/p5gn6zhe/


Что касается вызова .valid() в поле # 2 внутри пользовательского правила IP для поля # 1; неясно, почему вы хотите это сделать. Вы хотите, чтобы проверка поля # 2 зависела от того, заполнено ли поле №1? Если так, то что-то еще.

В противном случае вы будете запускать .valid() с помощью внешнего обработчика.

$('#ip').on('keyup blur', function() {
    $("#ip2").valid();
});

ДЕМО 2: https://jsfiddle.net/p5gn6zhe/2/

  • 0
    Спасибо, Спарки. Я решил проблему с помощью обратного вызова. Я вызвал эту проверку, выполнив setTimeout ($ ("# ip2"). Valid (), 0);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню