jQuery метод проверки никогда не вызывается - PullRequest
0 голосов
/ 20 февраля 2020

Я знаю, что в последнее время много спрашивал о jQuery проверке, но я думаю, что моя проблема сейчас сводится к базовым элементам.

Так что, если у меня есть эта страница HTML:

<html>
<head>
    <title>validation test</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.1/dist/jquery.validate.js"></script>
</head>
<body>
    <form id="theform">
        <div id="num" name="num">86</div>
    </form>
    <script type="text/javascript">     
        var validationObject = {
            rules: {
                num: {
                  numtest:true
                }
            }
        };

        $.validator.addMethod("numtest", function(value, element) {
            return value == 42;
         });

        $('form').validate(validationObject);
        if ($("form").valid())
            alert("VALID");
        else
            alert ("INVALID");
    </script>
</body>
</html>

Тогда я ожидаю, что предупреждение будет "INVALID", потому что num равно 86 вместо 42. Но вместо этого я получаю "VALID"; функция, которую я определил для проверки, не вызывается (я установил точку останова на return value == 42;, и она никогда не срабатывает). Почему это? Как я могу убедиться, что вызывается функция проверки?

1 Ответ

1 голос
/ 21 февраля 2020
  1. В пользовательском методе отсутствует сообщение об ошибке проверки. Вам также следует использовать this.optional(element), чтобы вы могли оставить поле пустым и использовать правило required отдельно. (Как вы и написали, поле также будет обязательным).

    $.validator.addMethod("numtest", function(value, element) {
        return this.optional(element) || (value == 46);
    }, "validation error message");
    
  2. Поместите все это в обработчик ready, который обеспечивает форма существует до вызова метода .validate(). (Однако это не то, что нарушало вашу форму, потому что JavaScript был вызван после HTML.)

  3. Этот плагин не распознает div потому что это не допустимый элемент ввода формы. Измените его на элемент <input />, <select> или <textarea>.

    <input type="text" id="num" name="num" />
    

Элемент № 3 был единственным, что могло нарушить ваш код.

Рабочая демонстрация: jsfiddle.net / c38uxh6m /

Пожалуйста, внимательно просмотрите SO Wiki-страницу и множество онлайн-примеров.

...