Перевірка jQuery: змінити повідомлення про помилку за замовчуванням


363

Чи є простий спосіб змінити значення помилок за замовчуванням у плагіні перевірки jQuery ?

Я просто хочу переписати повідомлення про помилки, щоб бути більш особистими для моєї програми - у мене багато полів, тому я не хочу встановлювати повідомлення індивідуально для поля x ... Я знаю, що можу це зробити!

Відповіді:


732

Додайте цей код в окремий файл / скрипт, включений після плагіна перевірки, щоб замінити повідомлення, редагуйте за бажанням :)

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, {обов'язково: "Обов'язково"});
Раві Рам

6
Я використав це для швидкого виправлення багатомовної форми: if ($ ('body'). Attr ('lang') == "es") {jQuery.extend ...};
Heraldmonkey

5
@ NickCraver, просто хотів сказати, що я ніколи не сподівався створити стільки відгуків з цим питанням ... і добре зроблено для своєчасної та швидкої відповіді!
Кевін Браун

3
Не шкода. Повідомлення не відображається, відображається лише необхідне повідомлення, хоча я використовував мінімальну довжину.
Пратік

2
Чи можемо ми включити ім’я елемента форми у повідомлення про помилку. Замість лише загального повідомлення. тобто поле для входу замість цього поля
Мусадік Хан

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
Дякую за вклад, але якщо ви уважніше читаєте питання, я запитую, як змінити типові параметри. Я знаю, що можу вказати унікальні повідомлення.
Кевін Браун

41
Щойно пітчінг - це було мені корисно, навіть якщо не націлено на питання.
Бріен Малоун

1
Так, це насправді виглядає кращою ідеєю, ніж зміна значень за замовчуванням, хоча саме те спочатку просили ОП
Роджер

2
@LisaCerilli У мене було те саме, виправили це, змінивши jQuery.format("...наjQuery.validator.format("...
lehel

1
Я знаю, що це старе, але перша ланка розірвана.
akousmata

87

Це працювало для мене:

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

$ .validator.messages.maxlength = jQuery.validator.format ("Будь ласка, введіть не більше {0} символів."); не працює. Я пропоную замість цього використовувати рішення Ніка Краверса.
Відар Вестнес

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.
Ксав'є Портебуа

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, Так, ми можемо встановлювати власні повідомлення, але як ми можемо відображати повідомлення про мінімальну та максимальну довжину. Я маю на увазі, якщо ми встановимо нестандартне, то повідомлення min та max не відображаються. Кожна ідея?
Нарен Верма

22

Ще одне можливе рішення - провести петлю над полями, додавши однакове повідомлення про помилку до кожного поля.

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

1
Це рішення було саме тим, що я шукав ... у моєму сценарії кожне поле форми має етикетку, тому я знаходжу відповідну мітку та додаю її до повідомлення, щоб, нарешті, написано "Ім'я потрібно". Дуже приємно, Ганське.
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 Validation, про який запитував ОП. Хоча це не поганий вибір, особливо якщо розміщення даних (правил, повідомлень), пов’язаних з валідацією, у зверненні HTML до вас звертається (плагін jQuery Validation Plugin йде навпаки, використовуючи Javascript для всього цього). Щоб згадати ще одну альтернативу для запису, Parsley.js - це ще один широко використовуваний та повнофункціональний плагін перевірки, який спирається на атрибути HTML.
Endre Обидва

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

замість цих спеціальних повідомлень про помилки ми можемо вказати тип текстового поля.

Наприклад: встановіть тип поля в на type = 'email'

тоді плагін ідентифікує поле та правильно перевірить.


він не просить правильно його підтвердити, він просить переписати повідомлення .... "Я просто хочу переписати повідомлення про помилки, щоб бути більш особистими для моєї програми"
Бенуа,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.