По умолчанию плагин вставляет элемент <label>
в соответствии с the errorElement
option, содержащий сообщение об ошибке, а затем при необходимости переключает этот элемент <label>
. Если бы ваш код работал, он переместил бы этот errorElement
, и плагин больше не сможет находить и переключать сообщения.
«Как я могу остановить это?»
Вы не можете. Разработчик не предоставляет прямой вариант или способ добавления любой разметки в обычный текст, который содержится в элементе сообщения проверки.
Однако, есть два способа решения, которые позволят достичь нужной разметки:
ONE: Вы можете установить пользовательские сообщения, содержащие <i>
уже закрепленному.
$('form').validate({
errorElementClass: 'input-validation-error',
errorClass: 'field-validation-error',
rules: {
foo: {
required: true
},
bar: {
required: true
}
},
messages: {
foo: {
required: "<i class='icon-warning'></i> This field is required"
},
bar: {
required: "<i class='icon-warning'></i> This field is required"
}
},
....
Это решение очень утомительно, если ваша форма содержит много полей и правил.
проверка концепции DEMO 1: jsfiddle.net/g4zq7p8j/
You could also use jQuery .extend()
to change all the default messages at once
TWO: Иначе вручную поместить <i>
элементы в разметке и установить их в качестве display: none
в вашей CSS.
<input type="text" name="foo" /><i class="icon-warning"></i>
Затем вы можете использовать highlight
и unhighlight
параметров обратного вызова для переключения этих <i>
элементов наряду с соответствующими сообщениями об ошибках.
$('form').validate({
errorElementClass: 'input-validation-error',
errorClass: 'field-validation-error',
errorPlacement: function(error, element) {
error.insertAfter($(element).next('i'));
},
highlight: function(element, errorClass, validClass) {
.... // default highlight code here
$(element).next('i').show();
},
unhighlight: function(element, errorClass, validClass) {
.... // default unhighlight code here
$(element).next('i').hide();
},
....
проверка концепции DEMO 2: jsfiddle.net/kxmw9do2/
You could also easily have jQuery insert these elements dynamically on page load
$(document).ready(function() {
$('<i class="icon-warning"></i>').insertAfter('[type="text"]');
....
Таким образом, нет никакого способа, чтобы получить сообщения об ошибках, чтобы содержать пользовательский HTML, который применяется ко всем ошибки без необходимости вручную настраивать каждую ошибку или иметь html уже в dom? – Cameron
Расширенное решение размещено здесь: http: // stackoverflow.com/a/2457053/594235 работает, но все же означает отмену каждого сообщения об ошибке, а не html. – Cameron
@Cameron, как я уже сказал в своем ответе, разработчик не предоставляет метод добавления HTML в текст сообщения. И да, решение '.extend()' уже является частью моего ответа ... это вариант обходного пути номер один, и я связан с ним под моей демонстрацией №1. Эти два обходных пути (и их варианты), похоже, достигают вашей окончательной желаемой разметки в соответствии с вашим ОП. – Sparky