it-roy-ru.com

ошибка плагина проверки jQuery: Ошибка типа: валидатор не определен

Вот 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],...

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

19
Damir Mitrovic

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

21
Damir Mitrovic

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

Как это:

<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();
8
Andrew Walters

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

Я провел последние 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>

Это сбрасывало функцию проверки $ и приводило к тому, что все ломалось.

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

  1. Сценарий в правильном порядке? JQuery с последующим подтверждением, а затем ненавязчивым.

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

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

    $.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, а также убедитесь, что элементы на главной странице по-прежнему имеют уникальные имена.

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

8
Pratik

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

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

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

2
MaVRoSCy

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

1
Xemadk

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

1
StackExchanger

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

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

1
Marcin Bigoraj

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

_.delay(doValidations);

function doValidations() {
...
});
1
Sreejith K.

В моем случае я звонил $.validator перед $(document).ready. Как только я переместил его в функцию, вызываемую из ready, это сработало. Он будет работать после или во время ready, но не раньше.

0
toddmo

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

$(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;
    });
0
Rust

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

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

Эта проблема возникала у меня при вызове validator.destroy () - ошибка происходила в методе staticRules плагина. Причиной оказалось то, что связанный элемент формы (element.form) был отсоединен от DOM. Я решил это, проверив, что элемент находится в DOM перед вызовом destroy, используя следующий метод:

document.contains(element)

Надеюсь, это кому-нибудь поможет.

0
James Hill