Bootstrap с плагином проверки jQuery
Я пытаюсь добавить проверку в мою форму с помощью плагина проверки jQuery, но у меня возникла проблема, когда плагин помещает сообщения об ошибках, когда я использую входные группы.
$('form').validate({
rules: {
firstname: {
minlength: 3,
maxlength: 15,
required: true
},
lastname: {
minlength: 3,
maxlength: 15,
required: true
}
},
highlight: function(element) {
$(element).closest('.form-group').addClass('has-error');
},
unhighlight: function(element) {
$(element).closest('.form-group').removeClass('has-error');
}
});
мой код:http://jsfiddle.net/hTPY7/4/
8 ответов:
для полной совместимости с twitter bootstrap 3, мне нужно переопределить некоторые методы плагинов:
// override jquery validate plugin defaults $.validator.setDefaults({ highlight: function(element) { $(element).closest('.form-group').addClass('has-error'); }, unhighlight: function(element) { $(element).closest('.form-group').removeClass('has-error'); }, errorElement: 'span', errorClass: 'help-block', errorPlacement: function(error, element) { if(element.parent('.input-group').length) { error.insertAfter(element.parent()); } else { error.insertAfter(element); } } });
для полной совместимости с Bootstrap 3 я добавил поддержку input-group,радио и флажок, этого не хватало в других решениях.
обновление 10/20/2017: проверил предложения других ответов и добавил дополнительную поддержку специальной разметки радио-inline, лучшее размещение ошибок для группы радиостанций или флажков и добавлена поддержка пользовательского .новалидация класс проверка элементов управления. Надеюсь, это поможет и спасибо за предложения.
после включения плагина проверки добавьте следующий вызов:
$.validator.setDefaults({ errorElement: "span", errorClass: "help-block", highlight: function (element, errorClass, validClass) { // Only validation controls if (!$(element).hasClass('novalidation')) { $(element).closest('.form-group').removeClass('has-success').addClass('has-error'); } }, unhighlight: function (element, errorClass, validClass) { // Only validation controls if (!$(element).hasClass('novalidation')) { $(element).closest('.form-group').removeClass('has-error').addClass('has-success'); } }, errorPlacement: function (error, element) { if (element.parent('.input-group').length) { error.insertAfter(element.parent()); } else if (element.prop('type') === 'radio' && element.parent('.radio-inline').length) { error.insertAfter(element.parent().parent()); } else if (element.prop('type') === 'checkbox' || element.prop('type') === 'radio') { error.appendTo(element.parent().parent()); } else { error.insertAfter(element); } } });
это работает для всех Bootstrap 3 классов форм. Если вы используете горизонтальную форму, вы должны использовать следующую разметку. Это гарантирует, что help-block текст уважает состояния проверки ("has-error",...) из форма-группа.
<div class="form-group"> <div class="col-lg-12"> <div class="checkbox"> <label id="LabelConfirm" for="CheckBoxConfirm"> <input type="checkbox" name="CheckBoxConfirm" id="CheckBoxConfirm" required="required" /> I have read all the information </label> </div> </div> </div>
Я использую формы, разработанные только с Twitter Bootstrap 3. Я устанавливаю функции по умолчанию для validor и запускаю только метод validate с правилами. Я использую иконки из FontAweSome, но вы можете использовать технологии glyphicons как в DOC пример.
jQuery.validator.setDefaults({ highlight: function (element, errorClass, validClass) { if (element.type === "radio") { this.findByName(element.name).addClass(errorClass).removeClass(validClass); } else { $(element).closest('.form-group').removeClass('has-success has-feedback').addClass('has-error has-feedback'); $(element).closest('.form-group').find('i.fa').remove(); $(element).closest('.form-group').append('<i class="fa fa-exclamation fa-lg form-control-feedback"></i>'); } }, unhighlight: function (element, errorClass, validClass) { if (element.type === "radio") { this.findByName(element.name).removeClass(errorClass).addClass(validClass); } else { $(element).closest('.form-group').removeClass('has-error has-feedback').addClass('has-success has-feedback'); $(element).closest('.form-group').find('i.fa').remove(); $(element).closest('.form-group').append('<i class="fa fa-check fa-lg form-control-feedback"></i>'); } } });
сделано. После запуска проверить функцию:
$("#default-register-user").validate({ rules: { 'login': { required: true, minlength: 5, maxlength: 20 }, 'email': { required: true, email: true, minlength: 5, maxlength: 100 }, 'password': { required: true, minlength: 6, maxlength: 25 }, 'confirmpassword': { required: true, minlength: 5, maxlength: 25, equalTo: "#password" } } });
добавление ответа Мигеля Борхеса выше вы можете дать пользователю эту зеленую обратную связь с успехом, добавив следующую строку в блок кода highlight/unhighlight.
highlight: function(element) { $(element).closest('.form-group').removeClass('has-success').addClass('has-error'); }, unhighlight: function(element) { $(element).closest('.form-group').removeClass('has-error').addClass('has-success'); }
это решение вам нужно, вы можете использовать
errorPlacement
метод переопределения, куда поместить сообщение об ошибке$('form').validate({ rules: { firstname: { minlength: 3, maxlength: 15, required: true }, lastname: { minlength: 3, maxlength: 15, required: true } }, errorPlacement: function(error, element) { error.insertAfter('.form-group'); //So i putted it after the .form-group so it will not include to your append/prepend group. }, highlight: function(element) { $(element).closest('.form-group').addClass('has-error'); }, unhighlight: function(element) { $(element).closest('.form-group').removeClass('has-error'); } });
это работает для меня, как по волшебству. Ура
вот что я использую при добавлении проверки в форму:
// Adding validation to form. $(form).validate({ rules: { title: { required: true, minlength: 3, }, server: { ipAddress: true, required: true } }, highlight: function(element) { $(element).closest('.form-group').removeClass('has-success').addClass('has-error'); }, success: function(element) { $(element).closest('.form-group').removeClass('has-error').addClass('has-success'); }, errorClass: 'help-block' });
это сработало для меня для стиля Bootstrap 3 при использовании библиотеки проверки jquery.
я использовал это для радио:
if (element.prop("type") === "checkbox" || element.prop("type") === "radio") { error.appendTo(element.parent().parent()); } else if (element.parent(".input-group").length) { error.insertAfter(element.parent()); } else { error.insertAfter(element); }
таким образом, ошибка отображается под последней опцией радио.
Это поля
$("#form_questionario").validate({ debug: false, errorElement: "span", errorClass: "help-block", highlight: function (element, errorClass, validClass) { $(element).closest('.form-group').addClass('has-error'); }, unhighlight: function (element, errorClass, validClass) { $(element).closest('.form-group').removeClass('has-error'); }, errorPlacement: function (error, element) { if (element.parent('.input-group').length || element.prop('type') === 'checkbox' || element.prop('type') === 'radio') { error.insertBefore(element.parent()); } else { error.insertAfter(element); } }, // Specify the validation rules rules: { 'campo1[]': 'required', 'campo2[]': 'required', 'campo3[]': 'required', 'campo4[]': 'required', 'campo5[]': 'required' }, submitHandler: function (form) { form.submit(); } });