javascript - MVC3 不显眼的验证 : how to remove/re-attach validation from a group of elements?

标签 javascript jquery asp.net-mvc-3 validation

这是用例:

我有一个带有字段组的长表单,只有当用户在其中一个可见输入中做出特定选择时,它才会变得可见。阅读 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/

相关文章:

javascript - 实际时间网页已与jquery一起使用

javascript - 如何在 Vue.js 模板中设置大量 HTML?

javascript - 不是 :contains isn't working

javascript - 在哪里可以找到使用 Crockford 方法进行原型(prototype)继承的大型 JavaScript 项目的示例?

jquery - Fancybox 与 MVC Razor

asp.net-mvc-3 - 如何使用 Razor 包含.html或.asp文件?

javascript - 如何根据在rails简单表单中选中的单选按钮渲染输入表单

javascript - 根据url激活左侧栏的菜单

asp.net-mvc-3 - MVC3 MapRoute,如何

asp.net-mvc-3 - 使用 ACS 登录另一个网站后如何在网站中获取登录用户身份