У меня была та же проблема, поэтому вместо использования функции errorPlacement
, которую можно использовать только внутри формы, я использовал настройку errorLabelContainer
с div
вне формы:
$("#my-form").validate({
errorLabelContainer : "#div_outside_form"
});
Теперь я могу разместить свое сообщение в любом месте с помощью css, но, к сожалению, в отличие от errorPlacement
, я не могу настроить каждое из них.Поэтому я вошел в jquery.validate.js
и искал место, где расположена метка ошибки: это строка 652 в версии 1.9.0
if ( !this.labelContainer.append(label).length )
this.settings.errorPlacement
? this.settings.errorPlacement(label, $(element) )
: label.insertAfter(element);
Я заменил эти строки на
if ( this.labelContainer.append(label).length ){
if (typeof(this.settings.labelCustomize)!='undefined')
this.settings.labelCustomize(label,$(element));
}else{
this.settings.errorPlacement
? this.settings.errorPlacement(label, $(element) )
: label.insertAfter(element);
}
добавить хук в настройках под названием labelCustomize
.Осталось только определить эту функцию в вызове validate:
$("#my-form").validate({
errorLabelContainer : "#div_outside_form",
labelCustomize : function(error, element) {
var offset = element.offset();
error.css("position","absolute")
.css("top",offset.top)
.css("left",offset.left-element.outerWidth());
}
});
Я только что попробовал, поэтому не уверен в надежности этого метода, но он работает.