jQuery Validate插件 - 不评估空字段

时间:2013-07-31 12:49:07

标签: jquery jquery-validate

我正在使用jQuery Validate插件,而我正在尝试做的应该相对简单,但我无法让它工作。

我有一个input字段,不是必填字段。如果没有输入任何内容,我不想在该字段上运行任何形式的验证。如果表单字段更改并包含我要对其进行验证的任何输入(例如,仅限数字),但如果该字段为空,则删除/不验证。

我尝试过这样的事情:

valForm('excessFrm');

var vou = $('input[name="voucher"]');

vou.blur(function(){
  if($(this).val() == ''){
    ( "#voucher" ).rules( "remove" );
  } else {
    ( "#voucher" ).rules( "add", {
        number: true
    });
  }
})

但无论我把它放在我的代码中,我都会收到此错误:

Uncaught TypeError: Object #voucher has no method 'rules' 

即使我确定已启动validate()对象,valForm()函数也会调用验证对象并设置所有默认规则等。

有人可以提供一些智慧的话吗?

2 个答案:

答案 0 :(得分:4)

引用OP:

  

我的输入字段不是必填字段。如果   没有任何东西进入该领域我不想运行任何形式的   现场验证。如果表单字段更改并包含任何   输入我想验证它,例如,仅对数字,但如果   该字段为空白,删除/不验证。

您刚刚描述了任何表单验证软件的预期正常行为,包括jQuery Validate插件。

您不需要自定义blur事件处理程序,因为该插件执行由默认启用的onfocusout选项触发的验证。

您无需添加&使用rules()方法删除规则,因为默认情况下,插件不会评估空字段上的规则。 (当然,唯一的例外是required规则,根据定义,它只适用于空字段。

删除你的代码并重新开始使用更像这样的东西......

<强> HTML

<form id="myform">  
     <input type="text" name="voucher" />
     <input type="submit" />
</form> 

<强>的jQuery

$(document).ready(function() {

    $('#myform').validate({
        rules: {
            voucher: {
                number: true
            }
        }
    });

});

工作演示http://jsfiddle.net/HBfJB/

正如您在演示中所看到的,将该字段留空可以提交,但是,当输入任何字符时,将评估验证规则。

答案 1 :(得分:1)

我和你有同样的要求......所以我使用了这段代码(来自isNullorWhitespace in javascript

function isNullOrWhitespace(input) {
    if (typeof input === 'undefined' || input == null) 
        return true;
    return input.replace(/\s/g, '').length < 1;
}

然后,在使用JQuery.Validator之前配置它:

 jQuery.validator.addMethod("validateNullOrWhiteSpace", function (value, element) {        
    return !isNullOrWhitespace(value);
 }, "Blanks are not allowed!");

在此之后,只需将其添加到自定义规则中(在我的情况下,我使用addClassRules):

  jQuery.validator.addClassRules("emailUserClass", {            
        email: true,
        validateNullOrWhiteSpace: true
    });

希望有所帮助

*如需了解更多信息,请访问http://jqueryvalidation.org/jQuery.validator.addMethod/