MVC3不显眼的验证:如何从一组元素中删除/重新附加验证
MVC3 unobtrusive validation: how to remove/re-attach validation from a group of elements?
用例如下:
我有一个长表单,其中包含一组字段,只有当用户在其中一个可见输入中做出特定选择时才会显示。阅读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
或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');
相关文章:
- 从所有元素中删除HTML5验证
- 在验证器中添加自定义规则以检查<ul>具有元素
- 使用jquery验证函数不适用于select元素
- validate.js验证数组元素
- 如何在JavaScript而不是HTML元素中设置AngularJS验证
- 使用webdriver和selenium验证元素是否不存在
- 如何对未知表单元素进行表单验证
- 验证元素值和复选框的Javascript
- 使用html 5对元素执行自定义表单验证功能
- Javascript:表单验证getElementById仅返回第一个id元素
- 表单元素值更改后的角度 JS 验证
- 如何在 angularjs 中验证元素指令
- 在验证元素是否存在时如何考虑 ng-if
- jQuery验证-元素未定义
- 如何使用javascript和localStorage验证元素是否存在于html中
- 在AngularJS动态电子邮件验证元素中,当我填写电子邮件检查元素时,它's重置
- 在添加到html页面之前验证元素是否存在
- 根据索引验证元素是否存在
- 在AngularJS中使用ng-disabled来验证元素集合时,会出现$rootScope:infdig错误
- 如何使用jquery验证元素列表