如何在defaultValue的可选字段上使用jQuery Validator自定义方法?

我正在使用最新版本的jQuery Validator插件以及jQuery(1.6.2)。

在我的电话号码可选字段中,我有一个defaultValue

HTML:

  

我按照此主题安装了一个自定义方法来validation电话号码。 这个想法是即使该字段是可选的,我仍然想要在输入文本时/之后validation它。

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() 

问题是因为我在这个可选字段上有一个defaultValue ,所以它也得到了validation。

是否可以编辑phone的自定义方法,如果该字段留空,它将忽略该字段上的defaultValue

我尝试使用if/then围绕正则表达式,但这似乎不起作用。

 $.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'); 

在思考它是如何工作之后,我知道这是错误的方法……所以现在我迷路了。

似乎您需要从传递给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'); 

示例: http //jsfiddle.net/L3S9e/