I added bassistance jQuery validation to a form on my jQuery Mobile project. It works perfect, except for the errors show up inside the text inputs and not below them. I kno
By default, when using jQuery Validate plugin along with jQuery Mobile, the error messages show up below the input element. Removing your custom errorPlacement
callback function...
Simple DEMO: http://jsfiddle.net/7rXnS/
$(document).on('pageinit', function () {
$('#registrationForm').validate({
rules: {
firstname: {
required: true
},
lastname: {
required: true
}
},
messages: {
firstname: {
required: "Please enter your first name."
},
lastname: {
required: "Please enter your last name."
}
}
});
});
However, jQuery Mobile wraps select
elements within div
elements so when the plugin adds the error label
it appears to be placed inside of the select
element. To fix this, use the errorPlacement
callback as follows. It checks to see if the element is a select
element and then inserts the error label
after the outermost div
wrapper. If the element is not a select
, it just uses the default placement.
errorPlacement: function (error, element) {
if (element.is('select')) {
error.insertAfter(element.parents('div.ui-select'));
} else {
error.insertAfter(element); // default placement
}
}
DEMO using a select
: http://jsfiddle.net/QuwkZ/
Dropping by to mention to that as of Jquery Mobile 1.4.3, this is still and issue and @Sparky's suggested workaround fixes it.