jQuery.validate недействителен, если контейнер скрыт - PullRequest
5 голосов
/ 16 февраля 2012

У меня есть несколько входов, разделенных на разные контейнеры (панели). У меня проблема в том, что если одна из этих панелей скрыта (style="display:none;"), плагин jQuery.validate не проверяет эти входные данные.

Я делаю тест с небольшим примером и происходит та же проблема:

вид:

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Fields</legend>

        <div class="UserName" style="display:none;">
            <div class="editor-label"> @Html.LabelFor(model => model.UserName) </div>
            <div class="editor-field">
                @Html.TextBoxFor(model => model.UserName) @Html.ValidationMessageFor(model => model.UserName)
            </div>
        </div>

        <div class="editor-label"> @Html.LabelFor(model => model.FirstName) </div>
        <div class="editor-field">
            @Html.TextBoxFor(model => model.FirstName) @Html.ValidationMessageFor(model => model.FirstName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.LastName)
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(model => model.LastName) @Html.ValidationMessageFor(model => model.LastName)
        </div>

        <div class="editor-label"> @Html.LabelFor(model => model.City) </div>
        <div class="editor-field">
            @Html.TextBoxFor(model => model.City) @Html.ValidationMessageFor(model => model.City)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>

}

Модель:

public class UserModel {

    [Required]
    [StringLength(6, MinimumLength = 3)]
    [Display(Name = "User Name")]
    [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed")]
    [ScaffoldColumn(false)]
    public string UserName { get; set; }

    [Required]
    [StringLength(8, MinimumLength = 3)]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }
    [Required]
    [StringLength(9, MinimumLength = 2)]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }
    [Required()]
    public string City { get; set; }

}

Свойство «UserName» не проверяется на клиенте, когда оно находится внутри div со стилем "display:none;"

Спасибо

1 Ответ

17 голосов
/ 16 февраля 2012

это желаемое поведение, чтобы не проверять скрытые поля ввода, с плагином jquery validate вы можете проверить скрытые поля ввода, установив опцию игнорирования, например

$('#fromID').validate({
            ignore: "",            
        });

, но так как вы используете ненавязчивую проверкув mvc3, который использует плагин jquery validate, вы не можете инициализировать плагин самостоятельно, вам придется изменить его настройки после его инициализации, например

var validatorSettings = $.data($('form')[0], 'validator').settings;
validatorSettings.ignore = "";

Reference

Это также полезный пост в блоге

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...