无法检索验证设置

时间:2014-11-26 12:17:17

标签: javascript html validation model-view-controller

我在MVC页面上使用验证,如果选中非英国复选框,我需要禁用邮政编码字段的验证。

我在视图中有以下代码:

    <div class="form-group">
        @Html.LabelFor(m => m.Postcode, new {@class = "col-sm-3 control-label"})
        <div class="col-sm-9">
            @Html.TextBoxFor(m => m.Postcode, new {@type = "text", @class = "form-control"})
            @Html.ValidationMessageFor(m => m.Postcode)
        </div>
     </div>
     <div class="form-group">
         @Html.LabelFor(m => m.IsNonUk, new {@class = "col-sm-3 control-label"})
         <div class="col-sm-9">
             @Html.CheckBoxFor(m => m.IsNonUk) 
         </div>
     </div>

以及我的Javascript中的以下代码:

    (function () {
        var val = $.data($('form')[0], 'validator');

        if (val != undefined) {
            var settngs = val.settings;
            settngs.ignore = ".ignore";
        } 

        $('#IsNonUk').change(function () {
            var isChecked = $(this).is(":checked");

            $(this).attr("value", isChecked);

            if (isChecked) {
                $("#Postcode").addClass("ignore");
            } else {
                $("#Postcode").removeClass("ignore");
            }
        });
    })();

已成功添加类别忽略并从邮政编码元素中删除 - 我已检查过Chrome的调试工具 - 但尝试检索验证设置的val返回undefined。我搜索了有关这些设置的文档,但一直无法找到它们(有人能指出我正确的方向吗?)。

我在stackoverflow上看过一些帖子,例如jQuery Validation: $.data($('form')[0], 'validator').settings returns undefined,但是他们没有帮助。

为什么我无法检索表单的设置?请帮忙!

中号

更新

我添加了一些代码以确保可以检索设置:

    $('#formCreateInvoice').ready(function () {
        var val = $.data($('form')[0], 'validator');

        if (val != undefined) {
            var settngs = val.settings;
            settngs.ignore = ".ignore";
        }
    })

这似乎工作正常。我在内部范围内放了一些日志记录,一切正常。如果我在首次加载页面时选中该框,则会按预期禁用验证。如果我在首次加载页面时取消选中此框,则会按预期启用验证。

问题似乎是添加和删除ignore类。如果我选中该框然后验证表单,那么我取消选中该框并重新验证表单,它无法正常工作。从postcode元素中拾取ignore类似乎存在一些问题。我会尝试逐步完成验证Javascript,但我使用的是VS2010 :(

2 个答案:

答案 0 :(得分:0)

请将此选择器替换为:

 $('#IsNonUk')

到那一个:

 $('.col-sm-9>input')

复选框的 id 不是IsNonUk ..它只是一个带有 col-sm-9 类的div中的输入元素..选择器全选父div和每个div选择输入

答案 1 :(得分:0)

我已经解决了这个问题,但这只是一个软糖:

    $('#IsNonUk').change(function () {
        var isChecked = $(this).is(":checked");

        $(this).attr("value", isChecked);

        if (isChecked) {
            $("#Postcode").addClass("ignore");
        } else {
            $("#Postcode").removeClass("ignore");
        }

        $('#formCreateInvoice').validate().resetForm();
        $("label.error").hide();
        $(".input-validation-error").removeClass("input-validation-error");
        $("span[id$='-error']").hide();
        $("span.field-validation-error").hide();
    });

它可以工作,但我宁愿不去删除类和修改库生成的属性。哼哼。

中号