0

我正在使用 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()函数仍会调用验证对象并设置我的所有默认规则等。

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

4

2 回答 2

4

引用操作:

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

您刚刚描述了任何表单验证软件的预期正常行为,包括 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/

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

于 2013-07-31T14:40:53.247 回答
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/

于 2015-08-07T17:18:03.080 回答