【问题标题】:MVC3 unobtrusive validation: how to remove/re-attach validation from a group of elements?MVC3 不显眼的验证:如何从一组元素中删除/重新附加验证?
【发布时间】:2011-10-06 11:30:39
【问题描述】:

这是用例:

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

问题是,当我逐个删除并重新附加这些验证规则时,这感觉有点怪异。我的问题是:没有更直接的方法吗?性能也是一个问题,在其中一种巨大的表单中,您会感觉到点击和验证运行之间的延迟。

【问题讨论】:

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


【解决方案1】:

不要删除并重新附加规则。只需 disableenable 输入。禁用的字段不参与验证,也不提交给服务器。

//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');

【讨论】:

  • 我绝对比我更喜欢你的解决方案,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多