Jquery 在'中更新验证摘要;实时';

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

嗨,我正在使用MVC4进行客户端验证。这非常适合在字段旁边显示验证消息

我添加了一个验证摘要:

 @Html.ValidationSummary(false)

这是可行的,客户端。但我希望它的表现有所不同;当前,验证摘要中的消息仅在单击“提交”按钮时更改。我希望它们是动态的,以类似于每个字段的验证消息的方式填充

有人能提出一个实现这一目标的方法吗


任何关于触发摘要更新的信息都非常有用。

客户端摘要似乎是在验证整个表单时生成的,您可以通过调用valid()plugin方法自己完成这项工作。在jquery验证脚本之后添加这个

<script>
    $(function () {
        $(':input').on("keyup click", function () {
            $('form').valid();
        });
    });
</script>

$(函数(){
$(':input')。在(“键控单击”上,函数(){
$('form').valid();
});
});

我包含的示例事件是keyup和click,但是您可以添加到这个空格分隔的列表中,也可以从中删除

我已经设置了验证摘要以“实时”更新,同时考虑了以下几点:

  • 仅在摘要可见后(页面验证/提交后)更新摘要
  • 当所有内容都有效时清除摘要
  • 让我们提取验证器,使用RORS()并实现我们的逻辑:

    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;
    };