Jquery 在'中更新验证摘要;实时';
嗨,我正在使用MVC4进行客户端验证。这非常适合在字段旁边显示验证消息 我添加了一个验证摘要:Jquery 在'中更新验证摘要;实时';,jquery,asp.net-mvc,asp.net-mvc-4,jquery-validate,Jquery,Asp.net Mvc,Asp.net Mvc 4,Jquery Validate,嗨,我正在使用MVC4进行客户端验证。这非常适合在字段旁边显示验证消息 我添加了一个验证摘要: @Html.ValidationSummary(false) 这是可行的,客户端。但我希望它的表现有所不同;当前,验证摘要中的消息仅在单击“提交”按钮时更改。我希望它们是动态的,以类似于每个字段的验证消息的方式填充 有人能提出一个实现这一目标的方法吗 任何关于触发摘要更新的信息都非常有用。客户端摘要似乎是在验证整个表单时生成的,您可以通过调用valid()plugin方法自己完成这项工作。在jqu
@Html.ValidationSummary(false)
这是可行的,客户端。但我希望它的表现有所不同;当前,验证摘要中的消息仅在单击“提交”按钮时更改。我希望它们是动态的,以类似于每个字段的验证消息的方式填充 有人能提出一个实现这一目标的方法吗
任何关于触发摘要更新的信息都非常有用。客户端摘要似乎是在验证整个表单时生成的,您可以通过调用valid()plugin方法自己完成这项工作。在jquery验证脚本之后添加这个
<script>
$(function () {
$(':input').on("keyup click", function () {
$('form').valid();
});
});
</script>
$(函数(){
$(':input')。在(“键控单击”上,函数(){
$('form').valid();
});
});
我包含的示例事件是keyup和click,但是您可以添加到这个空格分隔的列表中,也可以从中删除 我已经设置了验证摘要以“实时”更新,同时考虑了以下几点:
var validator = $('form').data('validator');
validator.settings.showErrors = function (map, errors) {
this.defaultShowErrors();
if ($('div[data-valmsg-summary=true] li:visible').length) {
this.checkForm();
if (this.errorList.length)
$(this.currentForm).triggerHandler("invalid-form", [this]);
else
$(this.currentForm).resetSummary();
}
}
由于我将此解决方案用于我的整个站点,因此我创建了以下init(onready):
下面是上面使用的重置摘要:
jQuery.fn.resetSummary = function () {
var form = this.is('form') ? this : this.closest('form');
form.find("[data-valmsg-summary=true]")
.removeClass("validation-summary-errors")
.addClass("validation-summary-valid")
.find("ul")
.empty();
return this;
};
“当前,只有在单击“提交”按钮时,验证摘要中的消息才会更改。”请创建一个提琴/演示,以便我们可以看到发生的情况。如果您向任何表单添加验证摘要,您应该可以很好地看到结果,但第一个错误发生时它不会再次显示摘要。不过,我认为这可以算作一个答案,谢谢。如果你总是想更新摘要,当然可以排除if($('div[data valmsg summary=true]li:visible').length)。但是如果你想在提交后启动更新,即使所有内容都有效,也要继续更新,我认为我们需要保持这种状态。例如,
$('form').data('updateSummary',true)代码>或者更好,您可以在$('form').on('change',function(e){$(this.valid();})上执行它;这难道不是比编写一堆代码容易得多吗?那为什么选票少呢?
jQuery.fn.resetSummary = function () {
var form = this.is('form') ? this : this.closest('form');
form.find("[data-valmsg-summary=true]")
.removeClass("validation-summary-errors")
.addClass("validation-summary-valid")
.find("ul")
.empty();
return this;
};