การตรวจสอบ jQuery: เปลี่ยนข้อความผิดพลาดเริ่มต้น


363

มีวิธีง่ายๆในการเปลี่ยนค่าความผิดพลาดเริ่มต้นในปลั๊กอินตรวจสอบ jQueryหรือไม่?

ฉันต้องการเขียนข้อความแสดงข้อผิดพลาดให้มีความเป็นส่วนตัวมากขึ้นในแอพของฉัน - ฉันมีฟิลด์จำนวนมากดังนั้นฉันจึงไม่ต้องการตั้งค่าข้อความแยกต่างหากสำหรับฟิลด์ x ... ฉันรู้ว่าฉันสามารถทำได้!

คำตอบ:


732

เพิ่มรหัสนี้ในไฟล์ / สคริปต์แยกต่างหากที่รวมอยู่หลังปลั๊กอินการตรวจสอบความถูกต้องเพื่อแทนที่ข้อความโดยแก้ไข at will :)

jQuery.extend(jQuery.validator.messages, {
    required: "This field is required.",
    remote: "Please fix this field.",
    email: "Please enter a valid email address.",
    url: "Please enter a valid URL.",
    date: "Please enter a valid date.",
    dateISO: "Please enter a valid date (ISO).",
    number: "Please enter a valid number.",
    digits: "Please enter only digits.",
    creditcard: "Please enter a valid credit card number.",
    equalTo: "Please enter the same value again.",
    accept: "Please enter a value with a valid extension.",
    maxlength: jQuery.validator.format("Please enter no more than {0} characters."),
    minlength: jQuery.validator.format("Please enter at least {0} characters."),
    rangelength: jQuery.validator.format("Please enter a value between {0} and {1} characters long."),
    range: jQuery.validator.format("Please enter a value between {0} and {1}."),
    max: jQuery.validator.format("Please enter a value less than or equal to {0}."),
    min: jQuery.validator.format("Please enter a value greater than or equal to {0}.")
});

31
ใช้งานได้ดีมาก ฉันเพิ่งเพิ่ม: $ .extend ($. validator.messages, {ต้องใช้: "Required"});
Ravi Ram

6
ฉันใช้สิ่งนี้เป็นการแก้ไขด่วนสำหรับแบบหลายภาษา: ถ้า ($ ('body'). attr ('lang') == "es") {jQuery.extend ... };
Heraldmonkey

5
@ NickCraver แค่อยากจะบอกว่าฉันไม่เคยคาดหวังว่าจะสร้างผู้อัปโหลดจำนวนมากด้วยคำถามนี้ ... และทำได้ดีสำหรับคำตอบที่รวดเร็วและรวดเร็ว!
เควินบราวน์

3
ไม่ทำงานขออภัย ไม่มีข้อความปรากฏขึ้นข้อความที่ต้องการจะปรากฏขึ้นแม้ว่าฉันจะใช้ความยาวต่ำสุด
Pratik

2
เราสามารถรวมชื่อองค์ประกอบของแบบฟอร์มในข้อความข้อผิดพลาด แทนที่จะเป็นข้อความทั่วไปเท่านั้น เช่นต้องการฟิลด์เข้าสู่ระบบแทนต้องใช้ฟิลด์นี้
Musaddiq Khan

239

คุณสามารถระบุข้อความของคุณเองในการตรวจสอบสาย การยกและย่อรหัสนี้จากแบบฟอร์มจดจำการลงทะเบียนนมที่ใช้ในเอกสารประกอบการตรวจสอบปลั๊กอิน ( http://jquery.bassistance.de/validate/demo/milk/ ) คุณสามารถระบุข้อความของคุณเองได้อย่างง่ายดาย:

var validator = $("#signupform").validate({
    rules: {
        firstname: "required",
        lastname: "required",
        username: {
            required: true,
            minlength: 2,
            remote: "users.php"
        }
    },
    messages: {
        firstname: "Enter your firstname",
        lastname: "Enter your lastname",
        username: {
            required: "Enter a username",
            minlength: jQuery.format("Enter at least {0} characters"),
            remote: jQuery.format("{0} is already in use")
        }
    }
});

API ที่สมบูรณ์สำหรับการตรวจสอบ (... ): http://jqueryvalidation.org/validate


7
ขอบคุณสำหรับอินพุต แต่ถ้าคุณอ่านคำถามให้ละเอียดยิ่งขึ้นฉันจะถามวิธีเปลี่ยนค่าเริ่มต้น ฉันรู้ว่าฉันสามารถระบุข้อความที่ไม่ซ้ำ
Kevin Brown

41
เพียงแค่ขว้างเข้าไป - สิ่งนี้มีประโยชน์สำหรับฉันแม้ว่าจะไม่ได้ตั้งเป้าหมายสำหรับคำถามก็ตาม
Brien Malone

1
ใช่นี่เป็นความคิดที่ดีกว่าการเปลี่ยนค่าเริ่มต้นแม้ว่าจะเป็นสิ่งที่ OP ต้องการมา แต่เดิม
Roger

2
@LisaCerilli ฉันมีเหมือนเดิมแก้ไขโดยเปลี่ยนjQuery.format("...เป็นjQuery.validator.format("...
lehel

1
ฉันรู้ว่ามันเก่า แต่การเชื่อมโยงแรกเสีย
akousmata

87

สิ่งนี้ใช้ได้กับฉัน:

$.validator.messages.required = 'required';

$ .validator.messages.maxlength = jQuery.validator.format ("โปรดป้อนอักขระไม่เกิน {0} ตัว"); ไม่ทำงาน, ไม่เป็นผล. ฉันแนะนำให้ใช้วิธีแก้ปัญหา Nick Cravers แทน
Vidar Vestnes

1
@VidarVestnes โซลูชันทำงานสำหรับสถานการณ์ของคุณด้วย คุณเพียงระบุสตริงรูปแบบและปลั๊กอินจะดำเนินการส่วนที่เหลือ:$.validator.messages.maxlength = "Please enter no more than {0} characters.";
rusmus

48

สิ่งนี้ใช้ได้กับฉัน:

// Change default JQuery validation Messages.
$("#addnewcadidateform").validate({
        rules: {
            firstname: "required",
            lastname: "required",
            email: "required email",
        },
        messages: {
            firstname: "Enter your First Name",
            lastname: "Enter your Last Name",
            email: {
                required: "Enter your Email",
                email: "Please enter a valid email address.",
            }
        }
    })

โปรดทราบว่าแม้ว่าคำตอบนี้ใช้สำหรับ jqueryValidation และไม่ใช่ jqueryFileUpload แต่ก็มีmessagesตัวเลือกใน$().fileuploadฟังก์ชั่น
Xavier Portebois

39

เนื่องจากเราใช้ JQuery อยู่แล้วเราสามารถให้ผู้ออกแบบเพจเพิ่มข้อความที่กำหนดเองลงในมาร์กอัพแทนที่จะเป็นโค้ด:

<input ... data-msg-required="my message" ...

หรือวิธีแก้ปัญหาทั่วไปเพิ่มเติมโดยใช้แอตทริบิวต์ data-msg แบบย่อเดียวในทุกฟิลด์:

<form id="form1">
    <input type="text" id="firstName" name="firstName" 
        data-msg="Please enter your first name" />
    <br />
    <input type="text" id="lastName" name="lastName" 
        data-msg="Please enter your last name" />
    <br />
    <input type="submit" />
</form>

และรหัสก็มีสิ่งนี้:

function getMsg(selector) {
    return $(selector).attr('data-msg');
}

$('#form1').validate({
    // ...
    messages: {
        firstName: getMsg('#firstName'),
        lastName: getMsg('#lastName')
    }
    // ...
});

นี้เป็นกลยุทธ์ที่ดีโดยเฉพาะอย่างยิ่งถ้าคุณต้องการชุดข้อความแบบไดนามิกที่ไม่ได้อยู่ในไฟล์ js ของคุณ ...
ชาร์ลส์ฮาร์มอน

@ user1207577 ใช่เราสามารถตั้งค่าข้อความที่กำหนดเอง แต่เราจะแสดงข้อความความยาวขั้นต่ำและความยาวสูงสุดได้อย่างไร ฉันหมายถึงถ้าเราตั้งค่าที่กำหนดเองจากนั้นข้อความต่ำสุดและสูงสุดไม่แสดงความคิดใด ๆ
Naren Verma

22

อีกวิธีหนึ่งที่เป็นไปได้คือการวนลูปมากกว่าฟิลด์โดยเพิ่มข้อความแสดงข้อผิดพลาดเดียวกันในแต่ละฟิลด์

$('.required').each(function(index) {
  $(this).rules("add", {
    messages: {
      required: "Custom error message."
   }
  });
});

1
วิธีการแก้ปัญหานี้เป็นสิ่งที่ฉันกำลังมองหา ... ในสถานการณ์ของฉันทุกเขตข้อมูลฟอร์มมีป้ายกำกับดังนั้นฉันจึงพบป้ายกำกับที่สอดคล้องกันและเติมข้อความนั้นให้ท้ายข้อความดังนั้นในท้ายที่สุดข้อความแจ้งว่า "ต้องใช้ชื่อจริง" เยี่ยมมาก Ganske
tjans

1
+1 แม้ว่าคำตอบอื่น ๆ ทั้งหมดนั้นจะถูกต้อง แต่นี่เป็นไวยากรณ์ที่ฉันต้องการ
scott.korin

6

แทนที่จะเปลี่ยนซอร์สโค้ดปลั๊กอินคุณสามารถรวมไฟล์ js เพิ่มเติมในรูปแบบเช่นเดียวกับในโฟลเดอร์โลคัลไลเซชั่นการดาวน์โหลดและรวมไฟล์นั้นหลังจากทำการโหลด validation.js

jQuery.extend(jQuery.validator.messages, {
    required: ...,
    maxlength: jQuery.validator.format(...),
    ...
});

มันไม่ใช่ เป็นเทคนิคเดียวกับคำตอบของคุณ ฉันโพสต์ความคิดเห็นของฉันไปยังรุ่นเก่าของคำตอบของคุณ จากนั้นเขียนคำตอบของฉันเอง ทั้งหมดนี้ไม่มีการโหลดหน้าซ้ำอย่างต่อเนื่อง ดังนั้นฉันเห็นเฉพาะคำตอบที่คุณแก้ไขเมื่อตรวจสอบความคิดเห็นของคุณ
กระวนกระวายใจ

5

@Josh: คุณสามารถขยายโซลูชันด้วยข้อความแปลจากชุดทรัพยากรของคุณ

<script type="text/javascript">
    $.validator.messages.number = '@Html.Raw(@Resources.General.ErrorMessageNotANumber)';
</script>

หากคุณใส่รหัสนี้เป็นส่วนหนึ่งของ _Layout.cshtml (MVC) คุณสามารถดูได้ทั้งหมด


4

ฉันไม่เคยคิดว่าจะง่ายขนาดนี้มาก่อนฉันกำลังทำงานในโครงการเพื่อตรวจสอบความถูกต้องดังกล่าว

คำตอบด้านล่างนี้จะช่วยได้มากสำหรับผู้ที่ต้องการเปลี่ยนข้อความยืนยันโดยไม่ต้องใช้ความพยายามมาก

วิธีการด้านล่างใช้ "ตัวยึดตำแหน่ง" แทนที่ "ฟิลด์นี้"

คุณสามารถปรับเปลี่ยนสิ่งต่าง ๆ ได้อย่างง่ายดาย

   // Jquery Validation   
   $('.js-validation').each(function(){

       //Validation Error Messages 

       var validationObjectArray = [];

       var validationMessages = {};

       $(this).find('input,select').each(function(){  // add more type hear

          var singleElementMessages = {};

          var fieldName = $(this).attr('name');

          if(!fieldName){  //field Name is not defined continue ;
              return true;
          }


          // If attr data-error-field-name is given give it a priority , and then to placeholder and lastly a simple text

          var fieldPlaceholderName = $(this).data('error-field-name') || $(this).attr('placeholder') || "This Field";

          if( $( this ).prop( 'required' )){

              singleElementMessages['required'] = $(this).data('error-required-message') || $(this).data('error-message')  || fieldPlaceholderName + " is required";

          }

          if( $( this ).attr( 'type' ) == 'email' ){

              singleElementMessages['email'] = $(this).data('error-email-message') || $(this).data('error-message')  || "Enter valid email in "+fieldPlaceholderName;

          }       



          validationMessages[fieldName] = singleElementMessages;

       });


       $(this).validate({
          errorClass   : "error-message",
          errorElement : "div",
          messages     : validationMessages  
       });  
   });  

ขอบคุณสำหรับการแบ่งปัน การใช้ "errorClass" และ "errorElement" เป็นอัจฉริยะ! ตอนนี้ฉันสามารถใช้สไตล์และตำแหน่งของข้อความผิดพลาดที่สร้างขึ้นจากการตรวจสอบ!
justdan23

3

รุ่นใหม่ล่าสุดมีสิ่งในบรรทัดที่ดีที่คุณสามารถทำได้

ถ้ามันเป็นช่องใส่ที่เรียบง่ายคุณสามารถเพิ่มคุณลักษณะdata-validation-error-msgเช่นนี้ -

data-validation-error-msg="Invalid Regex"

หากคุณต้องการบางสิ่งที่หนักกว่าเล็กน้อยคุณสามารถปรับแต่งสิ่งต่าง ๆ ได้อย่างเต็มที่โดยใช้ตัวแปรที่มีค่าทั้งหมดซึ่งส่งผ่านไปยังฟังก์ชันตรวจสอบความถูกต้อง อ้างอิงลิงก์นี้เพื่อดูรายละเอียดทั้งหมด - https://github.com/victorjonsson/jQuery-Form-Validator#fully-customizable


1
นี่เป็นปลั๊กอินที่แตกต่างจากปลั๊กอินการตรวจสอบ jQuery ที่ OP สอบถาม ไม่ใช่ทางเลือกที่แย่ แต่โดยเฉพาะถ้าการวางข้อมูลที่เกี่ยวข้องกับการตรวจสอบความถูกต้อง (กฎ, ข้อความ) ใน HTML ที่คุณสนใจ (ปลั๊กอินการตรวจสอบ jQuery ใช้วิธีตรงกันข้ามกับการใช้ Javascript สำหรับเรื่องทั้งหมด) หากต้องการพูดถึงอีกทางเลือกหนึ่งสำหรับการบันทึก Parsley.js เป็นปลั๊กอินการตรวจสอบความถูกต้องที่ใช้กันมากและมีคุณสมบัติครบถ้วนที่ใช้คุณลักษณะ HTML
สิ้นสุด

2

ในการลบข้อผิดพลาดเริ่มต้นทั้งหมดให้ใช้

$.validator.messages.required = "";

1
วิธีการทำเช่นนี้สำหรับเขตข้อมูลเฉพาะ?
151291

1

ข้อความตรวจสอบข้อผิดพลาดที่กำหนดเองแบบฟอร์ม jQuery -tutsmake

การสาธิต

$(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>


-2

แทนที่จะเป็นข้อความแสดงข้อผิดพลาดที่กำหนดเองเราสามารถระบุประเภทของฟิลด์ข้อความ

เช่น: ตั้งค่าประเภทของฟิลด์ในเพื่อพิมพ์ = 'อีเมล'

จากนั้นปลั๊กอินจะระบุฟิลด์และตรวจสอบความถูกต้อง


เขาไม่ขอให้ตรวจสอบอย่างถูกต้องเขาขอให้เขียนข้อความใหม่ .... "ฉันแค่ต้องการเขียนข้อความแสดงข้อผิดพลาดให้เป็นส่วนตัวมากขึ้นในแอปของฉัน"
เบอนัวต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.