Jquery验证自定义消息,用于动态更改的不同元素

时间:2016-08-05 19:21:37

标签: javascript jquery jquery-validate

我有一个带有维度字段的表单,我按如下方式验证表单。

$("#myForm").validate({
        rules:{
            "length" : {
                required: true,
                number: true,
                range: [0, 101.1]
            },
            "width" : {
                required: true,
                number: true,
                range: [0, 101.1]
            },
            "weight" : {
                required: true,
                number: true,
                range: [0, 99.999]
            }
        },
        messages : {
            "length" : {
                required: globalCtx.requiredMsg,
                range: $("#selectedUnit").val() =="true" ? globalCtx.invalidSizeMetric : globalCtx.invalidSizeImperial
            },
            "width" : {
                required: globalCtx.requiredMsg,
                range: $("#selectedUnit").val() =="true" ? globalCtx.invalidSizeMetric : globalCtx.invalidSizeImperial 
            },
            "weight" : {
                required: globalCtx.requiredMsg,
                range: $("#selectedUnit").val() =="true" ? globalCtx.invalidWeightMetric : globalCtx.invalidWeightImperial
            }
        }
    });

每次更改单位时,我都会调用以下函数来更改错误消息以反映英文消息。

function changeMetric(){
if($("#selectedUnit").val() =="true"){
        jQuery.extend(jQuery.validator.messages, {
            "weight":{
                range: globalCtx.invalidWeightMetric
            },
            "length" : {
                    range: globalCtx.invalidSizeMetric
                },
            "width" : {
                    range: globalCtx.invalidSizeMetric
                }
        });
    }else{
        jQuery.extend(jQuery.validator.messages, {
            "weight":{
                range: globalCtx.invalidWeightImperial
            },
            "length" : {
                range: globalCtx.invalidSizeImperial
            },
            "width" : {
                range: globalCtx.invalidSizeImperial
            }
        });
    }
}

但此功能未更新错误消息。

1 个答案:

答案 0 :(得分:0)

您需要return来自函数内的变量,否则它们将无法动态评估...

messages: {
    length: {
        required: function(element) {
            return globalCtx.requiredMsg;
        },
        range: function(element) {
            return $("#selectedUnit").val() =="true" ? globalCtx.invalidSizeMetric : globalCtx.invalidSizeImperial;
        }
    }, ....