3

我有 jquery 验证工作,因此当验证发生时,错误被放入容器而不是内联。

我的一些非必填字段有问题。有关代码,请参见下面的 jsfiddle。以下是简要概述:

名称:必填字段
注释:必填字段
Url:不需要,但 class='url' 以确保有效 url
电子邮件:不需要,但 class='email' 以确保有效电子邮件

要重现:在电子邮件字段或 url 字段中
输入值foo
并关闭标签 您将按预期收到“电子邮件无效”错误。
回到该字段并清除它并关闭标签
错误将消失,但错误容器仍然存在(您可以看到顶部的红色轮廓)

似乎对于正则表达式类型验证,如果不需要该字段,则当其中没有任何值时,它不会重置为忽略验证。如果我进入并实际修复错误,例如,发送电子邮件 foo@foo.com,一切正常。

如何获得验证以接受空白值对非必填字段有效?

jsfiddle 链接:http: //jsfiddle.net/tjans/napf7/

4

3 回答 3

2

利用errorClass

jQuery:

$(document).ready(function(){
    $("#commentForm").validate({
        wrapper: 'div',
        errorLabelContainer: '#jserror',
        errorClass: 'errorClass'
    });
  });​

然后将bordercss 规则移动到该错误类。必要的风格

#jserror {
    display:none;
}
.errorClass
{
  border:1px solid red;
}

演示

于 2012-07-31T22:24:01.843 回答
1

您可以覆盖该showErrors方法以提供您自己的功能。调用defaultShowErrors标准行为。我写了一个快速版本,它检查错误对象哈希中的任何错误,并有条件地显示或隐藏容器。试试看。如果您使用此解决方案,您可能还想检查hasOwnProperty对象枚举。

$("#commentForm").validate({
    wrapper: 'div',
    showErrors: function(errors){
        var hasErrors = false;
        for (var e in errors){
           hasErrors = true;
           break;
        }

        if(hasErrors) $(this.settings.errorLabelContainer).show();
        else $(this.settings.errorLabelContainer).hide();

        this.defaultShowErrors();
    },
    errorLabelContainer: '#jserror'
});
于 2012-07-31T22:19:22.560 回答
0

在验证插件中使用取消突出显示部分。

检查这个 jsFiddle http://jsfiddle.net/napf7/44/

于 2012-08-02T06:31:46.887 回答