【问题标题】:Jquery Validate custom error message locationJquery 验证自定义错误消息位置
【发布时间】:2014-10-22 01:09:34
【问题描述】:

这看起来很简单,但我想不通。我正在使用 jquery 验证插件。我正在尝试验证 <input name=first><input name=second> 以将错误消息输出到:

<span id="errNm2"></span> <span id="errNm1"></span>

我已经开始编写 errorPlacement: 自定义错误消息位置的地方。

如何将错误消息放入那些&lt;span&gt;

$(document).ready(function () {
    $('#form').validate({
        errorPlacement: function(error, element) {
            error.append($('.errorTxt span'));
        },
        rules,
});
<input type="text" name="first"/>
<input type="text" name="second"/>

<div class="errorTxt">
   <span id="errNm2"></span>
   <span id="errNm1"></span>
</div>

【问题讨论】:

    标签: jquery html jquery-validate


    【解决方案1】:

    你应该使用errorLabelContainer

    jQuery(function($) {
      var validator = $('#form').validate({
        rules: {
          first: {
            required: true
          },
          second: {
            required: true
          }
        },
        messages: {},
        errorElement : 'div',
        errorLabelContainer: '.errorTxt'
      });
    });
    .errorTxt{
      border: 1px solid red;
      min-height: 20px;
    }
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.js"></script>
    <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/jquery.validate.js"></script>
    <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/additional-methods.js"></script>
    
    <form id="form" method="post" action="">
      <input type="text" name="first" />
      <input type="text" name="second" />
      <div class="errorTxt"></div>
      <input type="submit" class="button" value="Submit" />
    </form>

    如果你想保留你的结构,那么

    jQuery(function($) {
      var validator = $('#form').validate({
        rules: {
          first: {
            required: true
          },
          second: {
            required: true
          }
        },
        messages: {},
        errorPlacement: function(error, element) {
          var placement = $(element).data('error');
          if (placement) {
            $(placement).append(error)
          } else {
            error.insertAfter(element);
          }
        }
      });
    });
    #errNm1 {
      border: 1px solid red;
    }
    #errNm2 {
      border: 1px solid green;
    }
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.js"></script>
    <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/jquery.validate.js"></script>
    <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/additional-methods.js"></script>
    
    <form id="form" method="post" action="">
      <input type="text" name="first" data-error="#errNm1" />
      <input type="text" name="second" data-error="#errNm2" />
      <div class="errorTxt">
        <span id="errNm2"></span>
        <span id="errNm1"></span>
      </div>
      <input type="submit" class="button" value="Submit" />
    </form>

    【讨论】:

    • 我建议对代码 $(placement).append(error) 进行一些小改动 ... 如果验证被多次触发 (Eg: multiple submit button click) 那么错误也会被多次附加。所以我认为最好有html 而不是append ... $(placement).html(error)
    【解决方案2】:

    您可以简单地创建额外的条件来匹配您在同一函数中所需的字段。例如,使用上面的代码...

    $(document).ready(function () {
        $('#form').validate({
            errorPlacement: function(error, element) {
                //Custom position: first name
                if (element.attr("name") == "first" ) {
                    $("#errNm1").text(error);
                }
                //Custom position: second name
                else if (element.attr("name") == "second" ) {
                    $("#errNm2").text(error);
                }
                // Default position: if no match is met (other fields)
                else {
                     error.append($('.errorTxt span'));
                }
            },
            rules
    });
    

    希望有帮助!

    【讨论】:

    • 这几乎对我有用。我唯一的问题是“其他”条件。如何更改它以运行默认验证位置?
    • 这可行,但请考虑使用数据属性的 Arun 解决方案,以允许您在标记中指定它,而不必为每个输入的 errorPlacement 函数添加新条件,这不是很干燥.
    【解决方案3】:
     if (e.attr("name") == "firstName" ) {
         $("#firstName__validate").text($(error).text());
         console.log($(error).html());
     }
    

    试试这个获取错误对象的文本

    【讨论】:

      【解决方案4】:

      HTML

      <form ... id ="GoogleMapsApiKeyForm">
          ...
          <input name="GoogleMapsAPIKey" type="text" class="form-control" placeholder="Enter Google maps API key" />
          ....
          <span class="text-danger" id="GoogleMapsAPIKey-errorMsg"></span>'
          ...
          <button type="submit" class="btn btn-primary">Save</button>
      </form>
      

      Javascript

      $(function () {
          $("#GoogleMapsApiKeyForm").validate({
            rules: {
                GoogleMapsAPIKey: {
                    required: true
                }
              },
              messages: {
                  GoogleMapsAPIKey: 'Google maps api key is required',
              },
              errorPlacement: function (error, element) {
                  if (element.attr("name") == "GoogleMapsAPIKey")
                      $("#GoogleMapsAPIKey-errorMsg").html(error);
              },
              submitHandler: function (form) {
                 // form.submit(); //if you need Ajax submit follow for rest of code below
              }
          });
      
          //If you want to use ajax
          $("#GoogleMapsApiKeyForm").submit(function (e) {
              e.preventDefault();
              if (!$("#GoogleMapsApiKeyForm").valid())
                  return;
      
             //Put your ajax call here
          });
      });
      

      【讨论】:

        【解决方案5】:

        JQUERY 表单验证自定义错误消息

        Demo & example

        $(document).ready(function(){
          $("#registration").validate({
            // Specify validation rules
            rules: {
              firstname: "required",
              lastname: "required",
              email: {
                required: true,
                email: true
              },      
              phone: {
                required: true,
                digits: true,
                minlength: 10,
                maxlength: 10,
              },
              password: {
                required: true,
                minlength: 5,
              }
            },
            messages: {
              firstname: {
              required: "Please enter first name",
             },      
             lastname: {
              required: "Please enter last name",
             },     
             phone: {
              required: "Please enter phone number",
              digits: "Please enter valid phone number",
              minlength: "Phone number field accept only 10 digits",
              maxlength: "Phone number field accept only 10 digits",
             },     
             email: {
              required: "Please enter email address",
              email: "Please enter a valid email address.",
             },
            },
          
          });
        });
        <!DOCTYPE html>
        <html>
        <head>
        <title>jQuery Form Validation Using validator()</title>
        <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> 
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.js"></script>
        <style>
          .error{
            color: red;
          }
          label,
          input,
          button {
            border: 0;
            margin-bottom: 3px;
            display: block;
            width: 100%;
          }
         .common_box_body {
            padding: 15px;
            border: 12px solid #28BAA2;
            border-color: #28BAA2;
            border-radius: 15px;
            margin-top: 10px;
            background: #d4edda;
        }
        </style>
        </head>
        <body>
        <div class="common_box_body test">
          <h2>Registration</h2>
          <form action="#" name="registration" id="registration">
         
            <label for="firstname">First Name</label>
            <input type="text" name="firstname" id="firstname" placeholder="John"><br>
         
            <label for="lastname">Last Name</label>
            <input type="text" name="lastname" id="lastname" placeholder="Doe"><br>
         
            <label for="phone">Phone</label>
            <input type="text" name="phone" id="phone" placeholder="8889988899"><br>  
         
            <label for="email">Email</label>
            <input type="email" name="email" id="email" placeholder="john@doe.com"><br>
         
            <label for="password">Password</label>
            <input type="password" name="password" id="password" placeholder=""><br>
         
            <input name="submit" type="submit" id="submit" class="submit" value="Submit">
          </form>
        </div>
         
        </body>
        </html>

        【讨论】:

          【解决方案6】:

          这对我有用

          实际上error是一个数组,包含错误信息和我们传递的元素的其他值,你可以console.log(error);看看。 内部 if 条件“error.appendTo($(element).parents('div').find($('.errorEmail')));” 只不过是在代码中查找html元素并传递错误信息。

              $("form[name='contactUs']").validate({
          rules: {
              message: 'required',
              name: "required",
              phone_number: {
                  required: true,
                  minlength: 10,
                  maxlength: 10,
                  number: false
              },
              email: {
                  required: true,
                  email: true
              }
          },
          messages: {
              name: "Please enter your name",
              email: "Please enter a valid email address",
              message: "Please enter your message",
              phone_number: "Please enter a valid mobile number"
          },
          errorPlacement: function(error, element) {
                  $("#errorText").empty();
          
                  if(error[0].htmlFor == 'name')
                  {
                      error.appendTo($(element).parents('div').find($('.errorName')));
                  }
                  if(error[0].htmlFor == 'email')
                  {
                      error.appendTo($(element).parents('div').find($('.errorEmail')));
                  }
                  if(error[0].htmlFor == 'phone_number')
                  {
                      error.appendTo($(element).parents('div').find($('.errorMobile')));
                  }
                  if(error[0].htmlFor == 'message')
                  {
                      error.appendTo($(element).parents('div').find($('.errorMessage')));
                  }
                }
              });
          

          【讨论】:

            【解决方案7】:

            在您的验证方法中添加此代码:

             errorLabelContainer: '#errors'
            

            在你的 html 中,简单地把这个放在你想要捕获错误的地方:

            <div id="errors"></div>
            

            所有错误都将保存在 div 中,与您的输入框无关。

            对我来说效果很好。

            【讨论】:

              【解决方案8】:

              例如,只需添加一个与输入字段具有相同id的空标签标签+“-error”即可。

              <input id="myID1" required>
              <input id="myID2" required>
              <div>
                  <label id="myID1-error" class="error" for="myID1"></label>
                  <label id="myID2-error" class="error" for="myID2"></label>
              </div>
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-02-08
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多