我在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 :(
答案 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();
});
它可以工作,但我宁愿不去删除类和修改库生成的属性。哼哼。
中号