Parsley.js - 在字段附近显示错误并在上面的组合列表中显示

2024-01-24

  1. 是否可以配置 Parsley.js 以显示其错误消息... a) 各个字段旁边,并且 b) 在页面其他位置的组合列表中 ...同时?

  2. 另外,是否可以使用返回生成错误的字段的超链接来呈现错误消息?

Thanks.


UPDATE:

接受的答案是一个很棒的例子(感谢 milz!),但它需要更多的改进。

为了其他读者的利益,这是我更新的代码,其中......

  1. 第一次验证失败后,错误消息不再重复(在原始示例中,尝试生成错误,然后在字段中重复按退格键 - 每次击键都会将一条新消息添加到列表中)

  2. 错误消息采用同一表单组中的标签文本(对于没有有意义的单独标签的单选按钮和复选框来说很方便)

  3. 当用户修复错误消息时,错误消息会立即从列表中删除。

  4. 整个错误面板都有一个标题,并且根据它是否有内容隐藏/显示。

  5. 提供 Bootstrap 样式、布局和欧芹配置。

为了回答 Adrian Rodriguez 关于在字段上方显示消息的问题,您可以通过以下 2 个步骤更改 Parsley 的默认错误消息的位置:

// A. CHANGE the 'errorsContainer' callback to...

    errorsContainer: function(el) {
      return el.$element.closest(".control").find(".top"); // Errors will be placed inside the 'div.control > div.top' elements.
    }

// B. Additionally, you will either need to manually add '<div class='top'></div>'
//    wherever you want the errors to appear. Alternatively, use a little
//    JQuery to add these elements to the whole form, as follows...

    // 1.5 PREPEND each .control div with a new container for errors
    $(".control").prepend("<div class='top'></div>");

    // 2. Parslify the form...
    etc.
// 1. Configure Parsley for Bootstrap 3 Forms
//
window.ParsleyConfig = {
  successClass: "has-success",
  errorClass: "has-error",
  classHandler: function(el) {
    return el.$element.closest(".form-group");
  },
  errorsContainer: function(el) {
    return el.$element.closest(".control");
  },
  errorsWrapper: "<span class='help-block parsley-messages'></span>",
  errorTemplate: "<span></span>"
};


// 2. Parslify the form...
$("#theForm").parsley();


// 3. Configure Parsley to display combined validation-errors-list
//
$(function() {


  // Convenience members
  $.validationErrors = {

    container: $('div.validation-errors-container'),

    list: $('div.validation-errors-container ul.validation-errors-list'),

    updateContainer: function() {
      // Hide/show container if list is empty/full
      $.validationErrors.container.toggleClass("filled", $.validationErrors.list.find("li:first").length > 0);
    },

    removeItem: function(sFieldName) {
      // Remove related error messages from list
      $.validationErrors.list.find('li[data-related-field-name="' + sFieldName + '"]').remove();
    }

  };



  // NB: Event names pertain to Parsley V2.0  


  // Before each validation, clear the validation-errors of the div
  $.listen('parsley:form:validate', function() {
    $.validationErrors.list.html();
  });

  // When a field has an error
  $.listen('parsley:field:error', function(fieldInstance) {

    var fieldName = fieldInstance.$element.attr('name');

    $.validationErrors.removeItem(fieldName);

    // Get the error messages
    var messages = ParsleyUI.getErrorsMessages(fieldInstance);

    // Loop through all the messages
    for (var i in messages) {
      // Create a message for each error
      var fieldLabel = fieldInstance.$element.closest(".form-group").find("label:first");
      var fieldLabelText = fieldLabel.clone().children().remove().end().text().trim();
      var fieldName = fieldInstance.$element.attr("name");
      var $m = $('<li data-related-field-name="' + fieldName + '"><a data-related-field-name="' + fieldName + '" href="#na"><strong>' + fieldLabelText + '</strong> - ' + messages[i] + '</a></li>');
      $.validationErrors.list.append($m);
    }
    $.validationErrors.updateContainer();

  });

  $.listen('parsley:field:success', function(fieldInstance) {
    $.validationErrors.removeItem(fieldInstance.$element.attr('name'));
    $.validationErrors.updateContainer();
  });

  // When there's a click on a error message from the div
  $(document).on('click', 'a[data-related-field-name]', function() {

    // take the field's name from the attribute
    var name = $(this).attr('data-related-field-name');
    $("[name=" + name + "]:first").focus();

  });

});
body {
  padding: 10px;
}
/* PARSLEY FORM VALIDATION */

/* ensure field-spans injected by parsley don't take up space when empty... */

.parsley-messages {
  display: none;
}
.parsley-messages.filled {
  display: block;
}
/* aggregated parsley error message display... */

div.validation-errors-container {
  display: none;
}
div.validation-errors-container.filled {
  display: block;
}
div.validation-errors-container ul.validation-errors-list {
  margin: 0;
  padding: 0;
}
div.validation-errors-container ul.validation-errors-list li {
  color: rgb(169, 68, 66);
  list-style: outside none disc;
  margin-left: 16px;
  padding-left: 1em;
  text-indent: -0.7em;
}
div.validation-errors-container ul.validation-errors-list li a {
  color: inherit;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/parsley.js/2.0.7/parsley.min.js"></script>

<!-- VALIDATION ERRORS CONTAINER -->

<div class="validation-errors-container panel panel-danger" role="alert" aria-labelledby="validation-errors-heading" aria-live="assertive">
  <div class="panel-heading" id="validation-errors-heading"><strong>Alert!</strong> Please correct the following errors...</div>
  <div class="panel-body">
    <ul class="validation-errors-list"></ul>
  </div>
</div>


<!-- BOOTSTRAP 3 FORM -->
<form class="form-horizontal" id="theForm">

  <div class="form-group">
    <label class="control-label col-xs-2">
      Name <span class="required-indicator" title="Required">*</span>
    </label>
    <div class="control col-xs-10">
      <input type="text" name="userName" class="form-control" data-parsley-required="true">
    </div>
  </div>

  <div class="form-group">
    <label class="control-label col-xs-2">
      Gender <span class="required-indicator" title="Required">*</span>
    </label>
    <div class="control col-xs-10">
      <label class="checkbox-inline">
        <input type="radio" data-parsley-required="true" name="gender" value="F" />Girl
      </label>
      <label class="checkbox-inline">
        <input type="radio" name="gender" value="M" />Boy
      </label>
    </div>
  </div>

  <div class="form-group">
    <label class="control-label col-xs-2">
      Email <span class="required-indicator" title="Required">*</span>
    </label>
    <div class="control col-xs-10">
      <input type="text" name="userEmail" class="form-control" data-parsley-type="email" data-parsley-required="true">
    </div>
  </div>


  <button type="submit" class="btn btn-primary">Submit</button>

</form>

为了实现你想要的,你需要使用欧芹的活动 http://parsleyjs.org/doc/index.html#events。查看事件的描述和下面代码的注释。

<div class="validation-errors"></div>
<form>
    <input type="text" name="field1" required />
    <input type="text" name="field2" required />
    <input type="submit" />
</form>

<script>
    $(document).ready(function() {
        // validate form
        $("form").parsley();

        // Before each validation, clear the validation-errors of the div
        $.listen('parsley:form:validate', function() {
            $('.validation-errors').html('');
        });

        // When a field has an error
        $.listen('parsley:field:error', function(fieldInstance){
            // Get the error messages
            var messages = ParsleyUI.getErrorsMessages(fieldInstance);

            // Get the field's name
            var fieldName = fieldInstance.$element.attr('name');

            // Loop through all the messages
            for (var i in messages) {
                // Create a message for each error
                var $m = $('<p><a class="focus-' + fieldName + '" href="#">' + fieldName + ': ' + messages[i] + '</a><p>');

                // Append the errors to the div
                $('.validation-errors').append($m);
            }
        });        
    });

    // When there's a click on a error message from the div
    $(document).on('click', 'a[class^="focus-"]', function(){
        // take the field's name from the class
        var parts = $(this).attr('class').split('-');

        $("[name=" + parts[1] + "]").focus();
    });
</script>

这是一个演示在 Jsfiddle 中 http://jsfiddle.net/milz/756tgsjq/.

重要的提示:我提供的代码使用 Parsley 2.0.* 中提供的事件。如果您使用的是新的 Parsley 2.1.*,您应该使用正确的事件。代替parsley:form:validate use form:validate并替换parsley:field:error by field:error.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Parsley.js - 在字段附近显示错误并在上面的组合列表中显示 的相关文章

  • Laravel 5 配置语言环境,不起作用

    已完成的修改 on 配置 应用程序 php locale gt env APP LOCALE en fallback locale gt en on env APP LOCALE pt 我也复制了 资源 lang en文件到 资源 lang
  • CakePHP3 中令人困惑的验证与应用程序规则

    有关验证的多个问题可能属于同一类 因为它们都在解决 CakePHP 3 中的新验证概念 我已阅读章节 1 http book cakephp org 3 0 en orm validation html 2 http book cakeph
  • 如何在 Typescript 中使用正则表达式进行电子邮件验证[重复]

    这个问题在这里已经有答案了 我需要使用 typescript Angular 应用程序验证 Excel 文件中的电子邮件和日期字段 我尝试使用正则表达式进行验证 但对于正确的电子邮件地址 结果始终返回 false 谁能帮我验证电子邮件和日期
  • JQuery 验证表单数组中的重复项

    我想显示重复或不唯一的值的错误 但我的表单接受输入数组 我已经在 jsfiddle 上检查了这些问题 name week 失败但是name week 工作正常 问题1 https stackoverflow com questions 24
  • JavaScript 使用正则表达式验证电话号码

    问候溢出者 我正在尝试编写一个正则表达式来验证 10 位数字 形式的电话号码 即 以下情况是有效的 1231231234 或 1111111111 无效的情况是少于 10 位或多于 10 位的数字字符串 到目前为止我的表达是这样的 d 10
  • YAML 中的映射键标识符允许使用字符吗?

    键中允许和不允许使用哪些字符 即example in example Value 在 YAML 中 根据 YAML 1 2 规范 仅建议使用可打印字符 并排除显式控制字符 see here http www yaml org spec 1
  • VueJS - 验证表单文件上传中的文件大小要求

    我正在使用 Bootstrap Vue 表单制作一个简单的表单 用户可以在其中上传文件 有没有办法验证使用 Vue 表单选择的文件的大小 我想阻止用户上传此类文件 我见过this https stackoverflow com questi
  • 如何根据多个条件创建所需的属性?

    我有一对单选按钮的列表 是 否 Q1 Y N Q2 Y N Q3 Y N Q4 Y N 我的模型中有一个属性public string MedicalExplanation get set 我的目标是 如果任何单选按钮已设置为 true 则
  • 将默认消息“验证错误:需要值”更改为“需要值”

    我可以修改这个默认值吗required true 验证消息仅显示 需要值 formId inputId 验证错误 值是必需的 Either使用输入组件的requiredMessage属性
  • WPF DataGrid 验证错误?

    这可能是预期的功能 但对我来说它确实像是一个错误 我正在使用开箱即用的 WPF DataGrid 绑定到 ObservableCollection 和尝试使用一些验证规则来提供良好的用户反馈 不用说 问题多得我数不过来 但我会坚持眼前的问题
  • JQuery 在提交之前需要复选框和单选按钮

    我很难弄清楚这一点 现在我们已经花了 3 个多小时来研究 JQuery 验证的示例和工具 我想做的只是要求选中一个复选框和一个单选按钮 但我不在乎需要哪一个
  • 如何使用第三方 JS 组件进行 Angular2/4 验证

    当谈到 Angular 2 验证时 我看到了不同的方法 基本方法是使用 HTML5 和模板 模型绑定或带有指定验证器的表单 然而 当涉及到特殊规则时 它需要大量编码 并且模板绑定 因此没有表单 通常会导致验证分散在 HTML 和 TS 代码
  • “通用”电话号码的基本正则表达式

    我需要一个正则表达式 用于 ASP NET 网站 来验证电话号码 它应该是灵活的 唯一的限制是 应至少为 9 位数字 没有字母 可以包含空格 连字符 单个 我搜索过 SO 和 Regexlib com 但我得到的表达式有更多限制 例如英国电
  • 阻止表单 POSTing,直到 javascript 代码得到满足

    每当我点击提交按钮时它就会触发alert empty username 但直接引导我去checklogin php 我怎样才能避免这种情况并让它保留在页面上 除非该字段不为空 function RequiredFields var user
  • 使用 Minitest 测试自定义验证器

    我有多个带有电子邮件验证的模型 因此 我将验证提取到自定义验证器中 我按照以下教程做到了这一点导轨指南 http guides rubyonrails org active record validations html custom va
  • 使用 jQuery 检查输入是否为空

    我有一个表单 我希望填写所有字段 如果单击某个字段然后未填写 我想显示红色背景 这是我的代码 apply form input blur function if input text is empty this parents p addC
  • 为什么验证不起作用并跳转到另一个页面?

    我写了一个customer display php来验证数据 到目前为止只有名字 但无论名字字段是否为空 网页都会跳转到customer search php并且没有更改数据库中的信息 为什么
  • Angular 模板验证表单

    我正在研究表单验证 我正在使用模板驱动的验证表单 其编码如下 现在工作正常 但是当我尝试添加时 username ngModel and password ngModel 在创建验证类的输入中 它向我显示一个错误 也请找到该错误 div c
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 使用 php/regex 验证美国电话号码

    EDIT 我混合并修改了下面给出的两个答案 以形成完整的功能 现在它可以完成我想要的功能 然后是一些 所以我想我会将其发布在这里 以防其他人来寻找同样的东西 Function to analyze string against many p

随机推荐

  • MySQL排序后如何选择更多行?

    我有一个表 其中有 10 个结果 我们来说说以下几点 id user number 1 user1 10 2 user2 5 3 user3 30 4 user4 45 5 user5 5 6 user6 22 7 user7 10 8 u
  • UICollectionView 不在 UITableViewCell 内滚动

    我在 UITableViewCell 内滚动 UICollectionView 时遇到问题 不幸的是 CollectionView 根本不滚动 当我尝试禁用其他 UITableViewCells 时 它可以正常工作 反之亦然 集合视图单元格
  • 将 Android 矢量绘图转换为启动器图标 PNG

    我已经将 Android 启动器图标制作为矢量 但我发现我应该使用 PNG 而不是矢量 XML 如何将我的矢量图像转换为 PNG 作为启动器图标 如果有帮助的话 这是矢量
  • 对于大列表,我可以使用嵌套线性布局而不是列表视图吗?

    我正在下载大量图像和文字 就像 Facebook 帖子一样 来自服务器 因此 当列表视图滚动时 它会在创建回收视图时闪烁 所以我想对我的主线性布局中的每个帖子使用多个线性布局 这样的话 会不会有滚动性能或者内存消耗的问题呢 请帮忙 肯定会存
  • Redis 存储没有值的键

    使用Redis时expire命令如SETEX https redis io commands setex and TTL https redis io commands ttl 在某些情况下 密钥根本不需要保存值 因为生存时间就这样行事 然
  • 应用程序加载器无法选择我的 Mac 应用程序的 zip 文件

    我的 Mac 应用程序的状态是 等待上传 当我启动应用程序加载器时 我可以从列表中选择它 但是 当我单击 选择 时 我无法选择应用程序的 zip 文件 或任何其他任何类型的文件 我尝试上传一个 iPhone 应用程序 看看应用程序加载器是否
  • 如何通过 VS Code Azure 帐户扩展切换帐户

    我已通过 VS Code 使用 Azure 帐户扩展登录我的 Azure 帐户之一 我没有找到任何退出或切换帐户的按钮 如何退出或切换帐户 您找不到使用 Azure 帐户扩展在 VS Code 中登录或注销的按钮 该扩展适用于命令面板中的命
  • 使用 JasperPrintManager.printReport(print, true) 打印 jasper 报告时出错;

    下面是我的代码 Map parameters new HashMap parameters put printer 1010111 FileInputStream file new FileInputStream new File getS
  • 如何为许多子图制作一个图例?

    我正在绘制相同类型的信息 但针对不同的国家 地区 并使用 Matplotlib 绘制多个子图 也就是说 我在 3x3 网格上有九个图 所有图都具有相同的行 当然 每行的值不同 但是 我还没有弄清楚如何在图形上放置一次图例 因为所有九个子图都
  • Azure Active Directory、应用程序注册、带哈希的回复 URL

    我希望在通过 Azure AD 登录后导航回 Angular 应用程序 我想要的回复网址是 http localhost 4200 authcallback http localhost 4200 authcallback 我尝试转义 ht
  • 如何在不继承句柄的情况下分叉进程?

    在我在 Mac 达尔文内核版本 10 4 0 上运行的 C C 服务器应用程序中 我正在分叉子进程 并希望这些子进程不继承服务器的文件句柄 文件 套接字 管道等 似乎默认情况下所有句柄都被继承 甚至netstat显示子进程正在监听服务器的端
  • 创建4.0蓝牙传输的socket

    我正在开发一个 Android 应用程序 可以将数据传输到 4 0 蓝牙串行设备 我正在指导 LeGatt android 示例项目 http developer android com samples BluetoothLeGatt in
  • Python:Collections.Counter 与 defaultdict(int)

    假设我有一些如下所示的数据 Lucy 1 Bob 5 Jim 40 Susan 6 Lucy 2 Bob 30 Harold 6 我想结合 删除重复的键 并且 添加这些重复键的值 这意味着我会得到键 值 Lucy 3 Bob 35 Jim
  • C# 中的枚举和组合框

    我目前正在开发一个 C 应用程序 我需要使用带有组合框的枚举来获取选定的月份 我有以下内容来创建枚举 enum Months January 1 February March April May June July August Septe
  • Ruby 子类实例变量可以覆盖超类(同名)的实例变量吗?

    在 Ruby编程语言 一书中的第7 3 5章 继承和实例变量 中说 因为实例变量与 继承 因此子类使用的实例变量不能 隐藏 超类中的实例变量 如果子类使用相同的实例变量 name 作为其祖先之一使用的变量 它将覆盖其 gt 祖先的价值 多变
  • 用户使用 S3 上传的最佳实践是什么?

    我想知道您对使用 s3 运行用户上传系统有何建议 我计划使用 MongoDB 来存储元数据 例如上传者 大小等 我应该如何在 s3 中存储实际文件 以下是我的一些想法 你认为最好的是什么 所有这些示例都涉及将元数据保存到 MongoDB 1
  • EF Code First 提高自引用、一对多关系的性能

    我有一个AccountGroup这是一个自引用实体 一片树叶AccountGroup可以包含 1 个或多个Accounts 两个实体都有Balance财产 每个AccountGroup has a Balance这是Balance子组或总和
  • Visual Studio 调试模式与发布模式

    您好 我正在使用 Visual studio 2010 但我不明白一件事 我可以在发布模式和调试模式下调试和设置断点 那么两者有什么区别呢 区别在于编译器在发布模式下应用的优化 如果您有 PDB 文件 则可以放置断点 并且默认情况下即使在发
  • 外键作为主键

    我设计了这样的表格 table1 students PK id name number table2 students score PK FK student id math score english score 问题1 如果有的学生根本
  • Parsley.js - 在字段附近显示错误并在上面的组合列表中显示

    是否可以配置 Parsley js 以显示其错误消息 a 各个字段旁边 并且 b 在页面其他位置的组合列表中 同时 另外 是否可以使用返回生成错误的字段的超链接来呈现错误消息 Thanks UPDATE 接受的答案是一个很棒的例子 感谢 m