Хобрук: Ваш путь к мастерству в программировании

Как проверить и обернуть сообщение об ошибке вокруг ввода?

Я использую отличный плагин проверки jQuery для своих входных данных:

<input type="text" name="name" value="" />

Я хотел бы добавить эту структуру (добавить div.error вокруг моего ввода и отобразить метку ошибки внутри div), что-то вроде этого:

<div class="error">
   <label id="name-error" class="error" for="name">This field is required.</label>
   <input type="text" name="name" value="" />
</div>

Я пытаюсь поиграть с функцией errorPlacement, но не могу.


  • Уточните, пожалуйста, в чем вам нужна помощь. 25.04.2015
  • Вам нужно показать остальную часть соответствующего кода, ваш вызов jQuery для метода .validate() и т. д. 25.04.2015

Ответы:


1

Плагин jQuery Validate автоматически создает и переключает элемент сообщения об ошибке.

  1. Вы можете указать тип элемента, например div, label и т. д., используя параметр errorElement. По умолчанию label.

  2. Вы можете указать размещение этого элемента сообщения об ошибке, например, до, после, внутри родителя и т. д., используя различные методы jQuery внутри вариант errorPlacement. По умолчанию "после" элемента input.

Однако вы не можете легко обернуть элемент сообщения об ошибке вокруг элемента input. Хотя для этого можно использовать jQuery с параметром errorPlacement, проблема возникает, когда ошибку необходимо устранить. Плагин автоматически удалит/скроет элемент сообщения об ошибке, когда сообщение необходимо очистить, и ваш элемент input будет удален/спрятан вместе с ним.

Решением будет создание внешнего div самостоятельно и использование highlight и unhighlight, чтобы переключить класс ошибки на этом внешнем div. Вам нужно будет не забыть также включить код по умолчанию в highlight и unhighlight, иначе поведение по умолчанию будет нарушено. Поскольку желаемый класс является классом ошибок по умолчанию, вы можете просто использовать аргумент errorClass в параметрах highlight и unhighlight.

Ваш HTML:

<div>
   <input type="text" name="name" value="" />
</div>

Ваш метод .validate():

$('#yourForm').validate({
    // rules and options,
    errorPlacement: function(error, element) {
        error.insertBefore(element);
    },
    highlight: function(element, errorClass, validClass) {
        $(element).addClass(errorClass).removeClass(validClass); // <- default behavior
        $(element).parent('div').addClass(errorClass); // <- add error class to your parent div
    },
    unhighlight: function(element, errorClass, validClass) {
        $(element).removeClass(errorClass).addClass(validClass); // <- default behavior
        $(element).parent('div').removeClass(errorClass); // <- remove error class from your parent div
    }
});

Конечный результат в DOM при ошибке проверки:

<div class="error">
   <label id="name-error" class="error" for="name">This field is required.</label>
   <input type="text" name="name" value="" />
</div>
25.04.2015
  • большое спасибо за ваш ответ, очень полезно ;-) хороших выходных 25.04.2015

  • 2

    Вы должны поиграть с обработчиком highlight, который позволяет вам определить способ пометить ввод как недействительный:

    jQuery.validator.setDefaults({
        highlight: function(element, error, valid){
            $(element).parent("div").addClass(error); 
            // or do whatever you want
        }
    });
    

    обратите внимание, что есть еще один обработчик с именем unhighlight, который также должен быть реализован, но противоположным образом. Вот вам пример:

    unhighlight: function(element, error, valid){
        $(element).parent("div").removeClass(error); 
        // or do whatever you want but in opposite way
    }
    

    Полное решение вашей проблемы должно выглядеть так:

    jQuery.validator.setDefaults({
        highlight: function(element, error, valid){
            $(element).parent("div").addClass(error); 
        },
        unhighlight: function(element, error, valid){
            $(element).parent("div").removeClass(error); 
        }
    });
    

    Обратите внимание, что приведенный выше код должен быть размещен на сайте желательно после вашего jquery.validation.js, потому что он меняет поведение jQuery.validator по умолчанию. Преимущество выполнения этого через jQuery.validator.setDefaults заключается в том, что ваша конфигурация будет применяться к каждой отдельной форме на вашем веб-сайте,

    24.04.2015
  • Спасибо, ваш ответ идеально подходит для asp.net mvc, где мы не вызываем .validate напрямую и полагаемся только на значения по умолчанию. 05.08.2016
  • Новые материалы

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...