我正在使用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()
函数也会调用验证对象并设置所有默认规则等。
有人可以提供一些智慧的话吗?
答案 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/