【问题标题】:jQuery Validate plugin - don't evaluate empty fieldsjQuery Validate 插件 - 不要评估空字段
【发布时间】:2013-07-31 12:49:07
【问题描述】:

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

有没有人可以给点建议?

【问题讨论】:

  • 你确定你使用的是验证插件吗?请参阅此示例源 codeproject.com/Articles/213138/…
  • 是的。表单上的其他字段验证正常。我只是在想,在应用 .blur 函数之前,验证可能没有实例化。因此验证对象不存在。你知道验证插件有没有回调吗?
  • 不知道哥们....你能试试 onfocusout 事件吗?在这里查看小提琴jsfiddle.net/tigerfinch/J8DvX/8
  • 我可能有另一种解决方法。感谢您的反馈。
  • 这不可能是完整/简洁的工作示例的所有代码。请显示您的其余代码。您的 HTML 标记在哪里? .validate()在哪里?

标签: jquery jquery-validate


【解决方案1】:

引用 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/

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

【讨论】:

    【解决方案2】:

    我和你有同样的要求......所以我使用了这个代码(来自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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多