diff --git a/src/core.js b/src/core.js index 7837ea713..ae0044a51 100644 --- a/src/core.js +++ b/src/core.js @@ -213,6 +213,9 @@ $.validator.format = function( source, params ) { return $.validator.format.apply( this, args ); }; } + if ( params === undefined ) { + return source; + } if ( arguments.length > 2 && params.constructor !== Array ) { params = $.makeArray( arguments ).slice( 1 ); } @@ -739,26 +742,29 @@ $.extend( $.validator, { return undefined; }, - defaultMessage: function( element, method ) { - return this.findDefined( - this.customMessage( element.name, method ), - this.customDataMessage( element, method ), - - // 'title' is never undefined, so handle empty string as undefined - !this.settings.ignoreTitle && element.title || undefined, - $.validator.messages[ method ], - "Warning: No message defined for " + element.name + "" - ); - }, + defaultMessage: function( element, rule ) { + var message = this.findDefined( + this.customMessage( element.name, rule.method ), + this.customDataMessage( element, rule.method ), - formatAndAdd: function( element, rule ) { - var message = this.defaultMessage( element, rule.method ), + // 'title' is never undefined, so handle empty string as undefined + !this.settings.ignoreTitle && element.title || undefined, + $.validator.messages[ rule.method ], + "Warning: No message defined for " + element.name + "" + ), theregex = /\$?\{(\d+)\}/g; if ( typeof message === "function" ) { message = message.call( this, rule.parameters, element ); } else if ( theregex.test( message ) ) { message = $.validator.format( message.replace( theregex, "{$1}" ), rule.parameters ); } + + return message; + }, + + formatAndAdd: function( element, rule ) { + var message = this.defaultMessage( element, rule ); + this.errorList.push( { message: message, element: element, @@ -1004,7 +1010,7 @@ $.extend( $.validator, { return $.data( element, "previousValue" ) || $.data( element, "previousValue", { old: null, valid: true, - message: this.defaultMessage( element, "remote" ) + message: this.defaultMessage( element, { method: "remote" } ) } ); }, @@ -1393,8 +1399,8 @@ $.extend( $.validator, { validator.showErrors(); } else { errors = {}; - message = response || validator.defaultMessage( element, "remote" ); - errors[ element.name ] = previous.message = $.isFunction( message ) ? message( value ) : message; + message = response || validator.defaultMessage( element, { method: "remote", parameters: value } ); + errors[ element.name ] = previous.message = message; validator.invalid[ element.name ] = true; validator.showErrors( errors ); } diff --git a/test/index.html b/test/index.html index 737da587d..db6e6689c 100644 --- a/test/index.html +++ b/test/index.html @@ -387,6 +387,10 @@

+
+ + +
ABC
123
diff --git a/test/test.js b/test/test.js index 8561f6f33..9df5c5eac 100644 --- a/test/test.js +++ b/test/test.js @@ -637,7 +637,17 @@ test( "option: errorClass with multiple classes", function() { test( "defaultMessage(), empty title is ignored", function() { var v = $( "#userForm" ).validate(); - equal( v.defaultMessage( $( "#username" )[ 0 ], "required" ), "This field is required." ); + equal( v.defaultMessage( $( "#username" )[ 0 ], { method: "required", parameters: true } ), "This field is required." ); +} ); + +test( "#741: move message processing from formatAndAdd to defaultMessage", function() { + var v = $( "#testForm22" ).validate(); + equal( v.defaultMessage( $( "#tF22Input" )[ 0 ], { method: "minlength", parameters: 5 } ), + "You should enter at least 5 characters.", "defaultMessage() now format the messages" ); + + $( "#tF22Input" ).val( "abc" ); + v.form(); + equal( v.errorList[ 0 ].message, "You should enter at least 5 characters." ); } ); test( "formatAndAdd", function() {