这是用例:
我有一个带有字段组的长表单,只有当用户在其中一个可见输入中做出特定选择时,它才会变得可见。阅读 Brad Wilson 关于该主题的帖子,我认为 jQuery.validator.unobtrusive.parse('.extra-data') 其中 .extra-data 是一类隐藏的 div。运气不好,因为在第一次解析完成时数据已经存在。
所以最后我想到了这个来删除规则:
$('.data-panel').find('input[type="text"], textarea, select').each(function (i, item) {
var currentRules = $(item).rules('remove'); // Saving removed rules to a sorta dictionary
if (!$.isEmptyObject(currentRules)) {
removedRules[$(item).attr("name")] = currentRules;
}
});
这是重新附加它们:
$('.data-panel').find('input[type="text"], textarea, select').each(function (i, item) {
if (!$.isEmptyObject(removedRules[$(item).attr('name')])) {
$(item).rules('add', removedRules[$(item).attr('name')]);
}
});
问题是,感觉有点老套,因为我真的要遍历每个字段,删除并重新附加这些验证规则。我的问题是:没有更直接的方法吗?性能也是一个问题,在其中一个巨大的表单中,您可以感觉到点击和验证运行之间的延迟。
最佳答案
不要删除和重新附加规则。只需禁用
或启用
输入。禁用的字段不参与验证,也不会提交给服务器。
//disable inputs. No validation will occur on these
$('.data-panel').find('input[type="text"], textarea, select').attr('disabled', 'disabled');
//enable inputs. Validation is re-enabled
$('.data-panel').find('input[type="text"], textarea, select').removeAttr('disabled');
关于javascript - MVC3 不显眼的验证 : how to remove/re-attach validation from a group of elements?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7673626/