以下是用例:
我有这个长字段,只有当用户在其中一个可见输入中进行某个选择时才会显示该字段。阅读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')]);
}
});
问题是,感觉有点hacky,因为我真的经历了每个字段删除并重新附加这些验证规则。我的问题是:是不是有更简单的方法?性能也是一个问题,在其中一种巨大的形式中,您可以感受到点击和验证运行之间的延迟。
答案 0 :(得分:23)
请勿删除并重新附加规则。只需disable
或enable
输入。禁用字段不参与验证,也不会提交给服务器。
//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');