Side navigation
#3503 closed enhancement (fixed)
Opened October 21, 2008 09:54AM UTC
Closed October 21, 2008 06:16PM UTC
Last modified March 14, 2012 11:17PM UTC
Add custom messages in rules method
| Reported by: | lightglitch | Owned by: | joern |
|---|---|---|---|
| Priority: | major | Milestone: | 1.3 |
| Component: | plugin | Version: | 1.2.6 |
| Keywords: | validate | Cc: | |
| Blocked by: | Blocking: |
Description
This would be really nice to add custom messages in the rules function for dynamic rules like this:
$("#field").rules("add", {"required":true,"range":[5,45],"messages":
{"required":"The field can\\'t be blank.","range":"The field must have
5 to 45 characters."}});
So for this I have applied a patch to the rules function:
rules: function(command, argument) {
var element = this[0];
if (command) {
var staticRules = $.data(element.form, 'validator').settings.rules;
var existingRules = $.validator.staticRules(element);
switch(command) {
case "add":
$.extend(existingRules, $.validator.normalizeRule(argument));
staticRules[element.name] = existingRules;
/**** PATCH ***/
if (argument.messages) {
if ($.data(element.form, 'validator').settings.messages[element.name])
$.extend($.data(element.form, 'validator').settings.messages[element.name],argument.messages);
else
$.data(element.form, 'validator').settings.messages[element.name] = argument.messages;
}
/**** END PATCH ***/
break;
case "remove":
if (!argument) {
delete staticRules[element.name];
/**** PATCH ***/
delete $.data(element.form, 'validator').settings.messages[element.name];
/**** END PATCH ***/
return existingRules;
}
var filtered = {};
$.each(argument.split(/\\s/), function(index, method) {
filtered[method] = existingRules[method];
delete existingRules[method];
/**** PATCH ***/
delete $.data(element.form, 'validator').settings.messages[element.name][method];
/**** END PATCH ***/
});
return filtered;
}
}
var data = $.validator.normalizeRules(
$.extend(
{},
$.validator.metadataRules(element),
$.validator.classRules(element),
$.validator.attributeRules(element),
$.validator.staticRules(element)
), element);
// make sure required is at front
if (data.required) {
var param = data.required;
delete data.required;
data = $.extend({required: param}, data);
}
return data;
}
Hope it helps.