【发布时间】:2015-03-11 15:11:09
【问题描述】:
我的表单上有 3 个字段:A、B 和 C。C 是只读字段,其值来自 A 和 B 的总和。如何让 jQuery Validate 在字段 C 上运行以确保提交表单时它的值是否大于0?
现在,如果我在字段 C 上设置验证,它不起作用。如果我从字段中删除只读属性,验证运行,但我不希望用户更改该字段中的值。
有什么想法吗?
【问题讨论】:
-
请显示相关代码,包括表单的 HTML 标记。
我的表单上有 3 个字段:A、B 和 C。C 是只读字段,其值来自 A 和 B 的总和。如何让 jQuery Validate 在字段 C 上运行以确保提交表单时它的值是否大于0?
现在,如果我在字段 C 上设置验证,它不起作用。如果我从字段中删除只读属性,验证运行,但我不希望用户更改该字段中的值。
有什么想法吗?
【问题讨论】:
min 规则设置为0 将确保字段大于或等于零。也可以write a custom rule using .addMethod()保证不能为零。
$.validator.addMethod("greaterThan", function( value, element, param ) {
return this.optional( element ) || value > param;
}, "The value must be greater than {0}")
$('#myform').validate({
rules: {
myField: {
greatherThan: [0]
}
}
});
{0} 不代表消息中的0 字符。它代表第一个参数值的 占位符。所以如果参数设置为0,占位符会自动将参数值插入到你的自定义消息中。
但是,此插件无法验证readonly 字段。当您考虑它时,验证用户无法直接控制的东西没有任何意义。
作为开发人员,您以编程方式控制后端数据,因此首先要确保其有效。换句话说,如果两个字段的总和必须始终大于零,那么您将编写一个自定义方法来查看这两个字段以确保它们的总和始终大于零。然后当用户收到验证错误时,只会出现在用户可以输入数据的字段上。
否则,您将不得不采取某种变通方法,以编程方式将结果复制到隐藏字段中,然后对隐藏的输入执行验证。将ignore 选项设置为[] 以忽略任何内容。否则,插件也会忽略隐藏的输入字段。
【讨论】:
此代码需要根据您的字段 ID 进行调整,但只有在 ID="C" 中的值大于 0 时才会提交表单。
$('form').submit(function() {
if($('#C').val() === 0) {
e.preventDefault();
//send some notification
}
});
【讨论】:
.submit() 处理程序破坏了使用 jQuery Validate 插件的整个想法/目的,它有自己的方法和选项来执行此操作。这样就只剩下 .val() > 0 相关了。
您可以在 focusin 上添加 readonly 属性,然后在 focusout 上删除它 如此处所述: How can I enable jquery validation on readonly fields?
【讨论】: