Jquery Validator не определен - PullRequest
       2

Jquery Validator не определен

3 голосов
/ 09 августа 2011

Я пытаюсь добавить проверку в динамическое поле ввода.В основном я скрываю и показываю поле (имеющее форму входа и регистрации в 1), например:

<div id="RegBoxStorage" style="display: none;">
    @Html.LabelFor(m => Model.Name)
    @Html.TextBoxFor(m => Model.Name)
    @Html.ValidationMessageFor(m => m.Name)
</div>
@using (Html.BeginForm("Login", "Auth", FormMethod.Post, new { id = "AuthForm" }))
{
<div id="RegBox" style="display: none;">
</div>
<div id="LoginBox">

    @Html.LabelFor(m => Model.Email)
    @Html.TextBoxFor(m => Model.Email)
    @Html.ValidationMessageFor(m => m.Email)

    @Html.LabelFor(m => Model.Password)
    @Html.TextBoxFor(m => Model.Password)
    @Html.ValidationMessageFor(m => m.Password)
</div>
<input type="submit" id="BtnAuthSub" value="Login" />
or <a id="ToggleAuth" href="#">Sign Up</a>
}

Сценарий:

$('#AuthForm').removeData("validator");
$('#AuthForm').removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse(this.authForm); // error here

Плагин:

(function ($) {
  $.validator.unobtrusive.parseDynamicContent = function (selector) {
    //use the normal unobstrusive.parse method
    $.validator.unobtrusive.parse(selector); //Error here

    //get the relevant form
    var form = $(selector).first().closest('form');

    //get the collections of unobstrusive validators, and jquery validators
    //and compare the two
    var unobtrusiveValidation = form.data('unobtrusiveValidation');
    var validator = form.validate();

    $.each(unobtrusiveValidation.options.rules, function (elname, elrules) {
      if (validator.settings.rules[elname] == undefined) {
        var args = {};
        $.extend(args, elrules);
        args.messages = unobtrusiveValidation.options.messages[elname];
        //edit:use quoted strings for the name selector
        $("[name='" + elname + "']").rules("add", args);
      } else {
        $.each(elrules, function (rulename, data) {
          if (validator.settings.rules[elname][rulename] == undefined) {
            var args = {};
            args[rulename] = data;
            args.messages = unobtrusiveValidation.options.messages[elname][rulename];
            //edit:use quoted strings for the name selector
            $("[name='" + elname + "']").rules("add", args);
          }
        });
      }
    });
  }
})($);

Поэтому, когда пользователь нажимает ToggleAuth, я перемещаю содержимое с RegBoxStorage на RegBox внутри формы.Теперь мне нужно вручную добавить подтверждение ввода.Все ненавязчивые атрибуты проверки уже есть в нем.Итак, из этого ответа , я попробовал это и сказал $.validator is undefined.

Но другие части формы фактически проверены, показывая, что проверка работает, у меня есть и jquery.validation и jqueryСсылка .validation.unobtrusive проверена.В чем может быть проблема?

Я также взял расширение плагина из этого блога .

1 Ответ

7 голосов
/ 09 августа 2011

Проверьте несколько вещей:

  • Вы написали расширение, но все еще в разделе Использование скриптов $.validator.unobtrusive.parse(this.authForm) - убедитесь, что вы используете parseDynamicContent.

  • Убедитесь, что вы ссылаетесь на validation.js и validation.unobtrusive.js перед кодом плагина.

  • Убедитесь, что ваш раздел Script находится внутри функции jQuery document.ready и выполняется после плагина.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...