jQuery 验证 - 验证只读字段

jQuery Validate - Validate read only field

我的表单上有 3 个字段:A、B 和 C。C 是一个只读字段,它的值是从 A 和 B 的总和得出的。我怎样才能使 jQuery 验证 运行 在字段 C 上,以确保在提交表单时其值大于 0?

现在,如果我在字段 C 上设置验证,它不起作用。如果我从字段中删除只读属性,验证 运行s,但我不希望用户更改该字段中的值。

有什么想法吗?

此代码需要根据您的字段 ID 进行调整,但它几乎只在 ID="C" 中的值大于 0 时才提交表单。

$('form').submit(function() {
   if($('#C').val() === 0) {
      e.preventDefault();
      //send some notification
   }
});

您可以在 focusin 上添加 readonly 属性,然后在 focusout 上删除它 如此处所述: How can I enable jquery validation on readonly fields?

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 选项设置为 [] 以忽略任何内容。否则,插件也会忽略隐藏的输入字段。