Подтвердить что ты не робот

Ошибка плагина проверки jQuery: TypeError: validator undefined

Вот html-код для формы:

<form method="post" id="login" action="/login">
 <div class="login-element">
    <label for="email">E-Mail</label>
    <input type="text" name="email">
</div>
<div class="login-element">
    <label for="password">Passwort</label>
    <input type="password"  name="password">
</div>
<div class="login-element">
    <input type="submit" value="Login">
</div>
</form>

и вот код, который я использовал для проверки:

    $(document).ready(function() { 
    $("#login").validate({
       debug: true,
       rules: {
            email: {
              required: true,
              email: true
            },
            password: {
              required: true
            }
        },
        messages: {
            email: {
                required: "Please enter a email adress",
                email: "Please enter a valid email address"
            },
            password:"Please enter password"
        }
    });
    });

В консоли регистрируется следующая ошибка:

TypeError: validator is undefined
...or.settings[eventType] && validator.settings[eventType].call(validator, this[0],...

В чем может быть проблема?

4b9b3361

Ответ 1

Эта ошибка произошла, потому что у меня был другой элемент html с тем же идентификатором. После удаления этого кода кода работал нормально.

Ответ 2

Вам нужно включить проверку script в начало вашего документа.

Вот так:

<script src="/js/libs/jquery.validate.js" type="text/javascript"></script>

Кроме того, проверьте в отображаемом HTML, что ваш идентификатор формы верен.

Я использую этот код для вызова проверки на своих сайтах

        //Validate Form
        var ids = [];
        $("form").each(function () {
            ids.push(this.id);
        });
        var formId = "#" + ids[0]
        $(formId).validate();

Ответ 3

Для тех, кто все еще ищет ответ, а ответы выше не работают.

Я провел последние 3 часа, пытаясь решить все проблемы, и никто из них не работал.

Наконец-то я поняла очень тупую ошибку, я дважды инициализировал JQuery в своем приложении

один раз в голове, где я включил 3 скрипта

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/jquery.validate.min.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

и еще раз в конце страницы, где у меня была строка.

<script src="~/Scripts/jquery-1.10.2.min.js"></script>

Это сбросило функцию валидатора в $и заставило все сломаться.

Некоторые вещи для проверки случаев, когда проверки не срабатывают.

  • Является ли script в правильном порядке? jquery, за которым следует проверка, а затем ненавязчивый.

  • Определяется ли функция $.validator? Проверьте быстро в консоли браузера

  • Является ли динамически создаваемая форма? Если это так, вам может потребоваться повторная инициализация плагина проверки правильности формы, лучший способ, который я нашел из этого, упомянуты ниже, выберите тот, который подходит для вас.

    $.validator.unobstrusive.parse('#myForm')
    

или

 $('#myForm').validate() // this just makes the validator plugin consider the form for unobstrusive validation

или

$('#myForm').valid() // this will trigger unobstrusive validation on the form.
  1. Если у вас сложная загрузка ajax для многих форм, убедитесь, что сценарии не включены снова и снова на каждой странице ajax, также убедитесь, что элементы на главной странице по-прежнему имеют уникальные имена.

Надеюсь, что это поможет.

Ответ 4

Тот же вопрос появился для меня. Причина этой ошибки в том, что я использовал код:

if ($("#invalidFormId").valid()) {
....
}

И элемент id элемента form недействителен

Ответ 5

В моем случае возникла проблема с двумя экземплярами JQuery UI я JQuery. Это привело к тому, что обычный код JQuery работает нормально, но удаляет intance $.validator.

Ответ 6

В моем случае ошибка состояла в том, что валидатор вызывался слишком рано. Я переместил код в отдельную функцию и вызвал его с помощью метода задержки underscore.js. Работали как шарм.

_.delay(doValidations);

function doValidations() {
...
});

Ответ 7

У меня было @Scripts.Render("~/bundles/jquery") в родительском представлении (_Layout.cshtml) и также определил некоторые другие теги jQuery Script в другом представлении, они столкнулись.

Ответ 8

Поскольку это первая тема, которую Google показывает, что "валидатор - это undefined", тогда я опишу свою проблему, возможно, кто-то найдет ее полезной.

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

Ответ 9

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

<script src="../jquery-validation/dist/jquery-validate.min.js"></script>
<script src="../jquery-validation/dist/additional-methods.min.js"></script>

Ответ 10

То же самое произошло здесь. Для меня это была опечатка в моем коде:

$(document).ready(function(){
    //START of validate
$('#reply').validate({
    rules:{
        message:{
            required: true,
            },  
        },
    submitHandler: function(form) {
        var data = $("#reply").serialize();
        $.ajax({
            type:"POST",
            url:"ajax/scripts/msg_crt.php",
            data:data,
            success:function(data){
                alert("Loaded");
                }
            });
        }
    });
    //END of validate
  });

$(document).on('click','#send', function(){
    if($('#replay').valid()){// <--- Here is my selector typo
        $("#replay").submit(); // <--- Here is my selector typo
        }
        return false;
    });