【问题标题】:jQuery validation - only show error message of last field validatedjQuery 验证 - 仅显示验证的最后一个字段的错误消息
【发布时间】:2021-01-06 10:51:20
【问题描述】:

如何防止在提交表单时显示多条错误消息?

我只想显示最后一个已验证字段的错误消息:password。我尝试按照另一篇文章中的建议使用errorPlacementjQuery validation - only show one error message$('.alert').remove();,但没有成功。

到目前为止我得到了什么:

<script>
    let form = $('#login');

    $('#login').validate({
        onkeyup: false,
        onclick: false,
        rules: {
            username: {
                required: true
            },
            password: {
                required: true
            }
        },
        errorPlacement: function(error) {
            $('.alert').remove();

            let div = $(
                '<div class="alert alert-warning alert-dismissable">\n' +
                '<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>\n' +
                '<h4><i class="icon fa fa-warning"></i>Opgepast!</h4>\n' +
                '<p>' + error.text() + '</p>\n' +
                '</div>'
            );

            div.insertBefore(form);
        },
        messages: {
            username: {
                required: "Gelieve een gebruikersnaam in te vullen."
            },
            password: {
                required: "Gelieve een wachtwoord in te vullen."
            }
        }
    });
</script>

【问题讨论】:

  • 当您单击提交按钮时,两条错误消息将依次显示。密码信息排在第二位,因此它是提交表单后显示的信息。也就是说,我个人无法重现该问题。
  • 是的,正确,提交后,显示所需的错误消息。但是,当我单击username 字段输入值时,onclick: false 似乎不再起作用,因为它立即显示适用于该字段的错误消息。是不是我配置错了?
  • 基本上,我只想在按下提交按钮时完成验证,如果有错误消息,则只显示最后一个。
  • 显示足够的代码来重现问题。您的表单的 HTML 标记在哪里?
  • 我想你可能想回去read the documentation again。如果您希望消息显示在表单之外,则不会使用errorPlacement - 这是用于表单内的自定义放置,例如在输入之前或之后。查看showErrors,以及处理消息和消息列表的其他选项。

标签: javascript jquery jquery-validate


【解决方案1】:

按照@Sparky 的建议将errorPlacement 更改为showErrors。结果:

showErrors: function(object) {
    $('.alert').remove();

    let amount = Object.keys(object).length;

    if(amount > 0){
        let key = Object.keys(object)[0];
        let value = object[key];

        let div = $(
          '<div class="alert alert-warning alert-dismissable">\n' +
          '<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>\n' + 
          '<h4><i class="icon fa fa-warning"></i>Opgepast!</h4>\n' +
          '<p>' + value + '</p></div>');

        div.insertBefore(form);
    }

【讨论】:

  • 就是disables the focusout validation trigger when leaving a field。考虑到您所描述的问题,这似乎有点骇人听闻:“我只想显示最后一个已验证字段的错误消息” - 最初填写表格时会怎样?您已经禁用了onkeyuponclick,因此您现在基本上禁用了所有交互式验证,只是为了阻止下一条消息出现。解决这个问题的最好方法是正确使用回调函数;比如showErrors 而不是errorPlacement
猜你喜欢
  • 1970-01-01
  • 2016-09-28
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
相关资源
最近更新 更多