【问题标题】:Parsley.js - Displaying Errors in a Specified ElementParsley.js - 在指定元素中显示错误
【发布时间】:2013-01-14 06:18:59
【问题描述】:

使用Parsley.js,是否可以指定应该保存错误消息的元素?我试过了:

$('#myForm').parsley({
    errors: {
        container: {
            $('#errorMessages')
        }
    }
});

但错误消息仍然放在我的表单输入之后。

【问题讨论】:

    标签: javascript jquery jquery-plugins parsley.js


    【解决方案1】:

    我添加了另一个数据属性data-parsley-errors-container="#element"。 这可以让您修改 DOM 以指定错误消息的显示位置。

    更多信息在这里:http://parsleyjs.org/doc/index.html#ui-for-field

    最好的

    【讨论】:

    • 太棒了!感谢您的提交。
    • @user12345 这是更新的链接parsleyjs.org/doc/index.html#ui-for-field
    • 你能在jsfiddel中给出简单的demo吗?
    • 谢谢,亲爱的你能帮我看看如何在不提供脚本的情况下获得我的自定义错误消息。我的意思是在输入内部。有可能吗?
    【解决方案2】:

    我从 container 键提供的函数中返回了 true

    我的 HTML 元素

    <input type="text" class="input-small" errorSpan="yyy"  id="ddd" name="ddd" value="" data-required="true">
    <span id="yyy"></span>
    

    Javascript

    $('#abc').parsley({
                errors: {
                    classHandler: function ( elem ) {}
                  , container: function ( elem, template, isRadioOrCheckbox ) {
                       //here i have span msg. id to be displayed as custom attribute in input element
                        $('#' + $(elem).attr('errorSpan')).html(template);
                        return true;//returning back boolean makes it work
                      }
                  , errorsWrapper: '<ul></ul>'
                  , errorElem: '<li></li>'
                  }
            });
    

    如果我返回也可以使用

    return $('#' + $(elem).attr('errorSpan')).html(template);
    

    希望这会有所帮助......

    【讨论】:

    • 嗨 gbagga,我在 1.1.10-dev 上更改了此行为。这是 BC Break。
    【解决方案3】:

    您需要使用回调函数来执行此操作

    这里是一个简单的例子,例如将错误消息附加到元素父级。

    $('#myForm').parsley({
        errors: {
            container: function ( elem ) {
                return $( elem ).parent();
            }
        }
    });
    

    编辑:在 1.1.10-dev 上工作,我改变了定义错误容器的方式,如上所示。小心,这是 BC Break;

    【讨论】:

    • 我也遇到了像 tanin 这样的问题,你能确认我们是否缺少一些东西吗?我发布了一个解决方案,不确定它是否合适,但它对我有用:)。
    • 我的错。上述行为是早期实现,不再是验证。你的解决方案是对的。但是现在想到这一点,我发现这种自定义方式不是很方便,在你的元素中插入一个模板。也许我应该回到我上面的实现,更简单和可读,你只需要返回一个 dom 元素,其中模板将由 Parsley 插入?
    【解决方案4】:

    data-parsley-errors-container="#your-div-id" 为我工作

    <div class="form-group">
      <label for="middle-name" class="control-label col-md-3 col-sm-3 col-xs-12">Start Time</label>
      <div class="col-md-6 col-sm-6 col-xs-12">
           <div class=" datetimepicker3 input-append timepick">
              <input class="form-control" data-format="hh:mm" placeholder="HH:MM" type="text" name="startTime" data-parsley-errors-container="#startTimeErrorContainer" required="required"  id="startTime" />
              <span class="add-on"><i class="fa fa-clock-o icon-time"></i></span>  
           </div>   
          <div id="startTimeErrorContainer"></div>                                            
      </div>                       
    

    【讨论】:

      【解决方案5】:

      @guillaumepotier 我已经在 jquerymobile 上尝试了您的代码,但屏幕上没有显示任何错误消息。我想在“help-inline”类中添加错误消息

      index.html

      <script src="js/vendor/parsley.message.th.js"></script>
      <script src="js/vendor/parsley.extend.min.js"></script>
      <script src="js/vendor/parsley.min.js"></script>
      
      ...
      
      <div class="control-group">
          <label class="control-label" for="A0_C1">From<i class="required-icon"></i></label>
          <div class="controls">
              <input type="text" id="A0_C1" name="A0_C1" value="" required="required" />
              <span class="help-inline"></span>
          </div>
      </div>
      

      parsley.message.th.js

      window.ParsleyConfig = $.extend( true, {}, window.ParsleyConfig, { 
          errors: {
              container: function ( elem ) {
                  return $(elem).parent().find(".help-inline");
              }
          }
      });
      

      更新 - v1.1.9-dev 上的工作解决方案

      return $(elem).closest('.controls').find('.help-inline').append(template);
      

      【讨论】:

      • 确实如此。对不起。它正在处理以前的实现。 @gbagga 的答案是正确的,虽然不是很方便也不简单。我想我会在 1.1.9 中回到我的答案实现 ..
      • 我已经更新了我的解决方案。但我不确定这是否是未来的正确做法。
      • 当然。最好只返回一个 elem,Parsley 会将其内容附加在其中。并且不必在此函数中处理template。你怎么看?
      • 现在在 1.1.10-dev 上更改;它将符合我上面的答案。小心,这是 BC Break;
      【解决方案6】:

      只需在 Parsley 库导入之前定义 classHandler 函数, 就我而言,我使用的是引导程序,它是在父 div 上应用错误和有效类(它有“form-group”类)。

      <script>
          window.ParsleyConfig = {
            classHandler: function ( parsleyField) {
            // specify where parsley error-success classes will be set
            return parsleyField.$element.parent();
            // Change this to change the element to apply too
            },
          };
      </script>
      

      现在只需将 data-parsley validate 添加到您的表单标签:

      <form  method="post" id="form1" data-parsley-validate>
      

      使用bootstrap时,还需要指定bootstrap错误和有效类

      <form method="post" id="form1" data-parsley-error-class="has-error" data-parsley-success-class="has-success" data-parsley-validate>
      

      为了让父 div 上的“has-error”类设置为无效/错误状态(同样适用于有效状态):

      <div class="form-group has-error">
          <label>Name</label>
          <input class="form-control" type="text" id="name" name="name" required="" data-parsley-trigger="keyup" data-parsley-minlength="5">
          <p class="help-block">Example help text here.</p>
      </div>
      

      此解决方案适用于所有领域。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-15
        • 1970-01-01
        • 2014-08-30
        • 1970-01-01
        • 1970-01-01
        • 2015-07-05
        相关资源
        最近更新 更多