¿Cómo utilizar el método personalizado jQuery Validator en el campo opcional con defaultValue?

Estoy usando la última versión del complemento jQuery Validator junto con jQuery (1.6.2).

En mi campo opcional para el número de teléfono, tengo un valor defaultValue .

HTML:

  

Instalé un método personalizado para validar números de teléfono según este hilo . La idea es que, aunque el campo es opcional, quiero validarlo si / cuando se ingresa el texto.

jQuery / JavaScript:

 $(document).ready(function() { var nameMsg = "Please enter your full name.", emailMsg = "Please enter your email address.", emailMsgV = "This is not a valid email address.", commentsMsg = "Please enter your comments."; $.validator.addMethod('phone', function (value, element) { return this.optional(element) || /^[01]?[- .]?\(?[2-9]\d{2}\)?[- .]?\d{3}[- .]?\d{4}$/.test(value); }, 'This is not a valid number.'); $('#contactForm').validate({ onkeyup: false, validClass: 'valid', rules: { Name: { required: true }, email: { required: true, email: true }, Phone: { required: false, phone: true }, Comments: { required: true } }, messages: { Name: nameMsg, email: { defaultInvalid: emailMsg, required: emailMsg, email: emailMsgV }, Comments: commentsMsg }, success: function(error) { setTimeout(function() { // Use a mini timeout to make sure the tooltip is rendred before hiding it $('#contactForm').find('.valid').qtip('destroy'); }, 1); }, submitHandler: function(form) { $('#contactForm .autoclear').each(function() { if (this.value === this.defaultValue) { this.value = ''; } }); form.submit(); }, errorPlacement: function(error, element) { $(element).filter(':not(.valid)').qtip({ overwrite: false, content: error, position: { my: 'left center', at: 'right center' }, show: { event: false, ready: true }, hide: false }).qtip('option', 'content.text', error); } // closes errorPlacement }) // closes validate() }); // closes document.ready() 

El problema es que, dado que tengo un valor defaultValue en este campo opcional, también se está validando.

¿Se puede editar el método personalizado para el phone de tal manera que ignorará el valor defaultValue en el campo si el campo se deja en blanco?

Intenté rodear la expresión regular con un if/then , pero eso no parece funcionar.

 $.validator.addMethod('phone', function (value, element) { if (value != element.defaultValue) { return this.optional(element) || /^[01]?[- .]?\(?[2-9]\d{2}\)?[- .]?\d{3}[- .]?\d{4}$/.test(value); } }, 'This is not a valid number'); 

Después de pensar en cómo funciona, sé que este es el enfoque equivocado … así que ahora estoy perdido.

Parece que necesitas devolver algo de la función que pasas a addMethod :

 $.validator.addMethod('phone', function (value, element) { if (value != element.defaultValue) { return this.optional(element) || /^[01]?[- .]?\(?[2-9]\d{2}\)?[- .]?\d{3}[- .]?\d{4}$/.test(value); } return true; }, 'This is not a valid number'); 

Ejemplo: http://jsfiddle.net/L3S9e/