需要Jquery Validation Plugin方法(dependency-expression)使用ok但回调不起作用

时间:2009-12-29 13:18:08

标签: javascript jquery jquery-validate validation

我正努力做这项工作; 此验证适用于付款表单,如您所见,只有3个需求输入,当且仅当

input[type=radio]:checked').val() != "CB";

这意味着用户是否要用信用卡支付其他费用。 以下是验证表单的完整代码。

$("#paiement").validate({
        errorClass: "invalid",
        validClass: "success",
        rules: {
            referenceTypeComplementBancaire: true,
            banque: {
                required: function(nomBanque){
                    return $('#paiement input[type=radio]:checked').val() != "CB";
                }
            },
            numeroComplementBancaire: {
                required: function(numeroCompl){
                    return $('#paiement input[type=radio]:checked').val() != "CB";
                }  
            },
            montantComplementBancaire: {
                required: function(montantCompl){
                    var logg = montantRentre >= panierTotal;
                    console.log(logg);
                    return montantRentre >= panierTotal;
                }
            }
        },
        messages: {
         referenceTypeComplementBancaire: "",
         banque:"",
         numeroComplementBancaire:"",
         montantComplementBancaire:""
        }
    });
}

没什么难的,真的。 但是,我很难理解为什么montantComplementBancaire没有经过验证,即使我的控制台记录在合适的时间显示我'真'或'假'。 我做错了什么?

---------------------------- EDIT ------------------ ------------------------

我认为存在某种误解,我的错。对不起,伙计们。 这是表格最终的样子:

        $("#paiement").validate({
        errorClass: "invalid",
        validClass: "success",
        rules: {
            referenceTypeComplementBancaire: true,
            banque: {
                required: function(nomBanque){
                    return $('#paiement input[type=radio]:checked').val() != "CB";
                }
            },
            numeroComplementBancaire: {
                required: function(numeroCompl){
                    return $('#paiement input[type=radio]:checked').val() != "CB";
                }  
            },
            montantComplementBancaire: {
                required: function(){
                    var logg = panierTotal > montantRentre; 
                    console.log(logg); 
                    return panierTotal > montantRentre; 
                }
            }
        },
        messages: {
         referenceTypeComplementBancaire: "",
         banque:"",
         numeroComplementBancaire:"",
         montantComplementBancaire:""
        }
    });

我哪里出错了?我不仅需要验证“montantComplementBancaire”,而且我希望它是有效的IF,并且只要它的> =到panierTotal

现在,我只是测试是否验证它,但我正在寻找的是当montantRentre> = panierTotal时返回'有效'的方法。

我是否更清楚了?

3 个答案:

答案 0 :(得分:2)

尝试return logg;return (montantRentre >= panierTotal);

您的代码看起来不错,似乎与此处的示例匹配(http://docs.jquery.com/Plugins/Validation/Methods/required#dependency-callback)。 required属性不需要是具有depends属性的对象,它可以像您一样使用依赖回调函数。

您也可以尝试

if(montantRentre >= panierTotal) {
  return true;
} else {
  return false;
}

答案 1 :(得分:2)

我认为您的验证设置不正确。每个表单元素的“required”属性应该是一个JavaScript对象,其中“depends”属性设置为一个函数,假设你要做的是条件要求。请参阅验证选项页面上的“规则”条目:http://docs.jquery.com/Plugins/Validation/validate#toptions

我认为固定代码是:

$("#paiement").validate({
    errorClass: "invalid",
    validClass: "success",
    rules: {
            referenceTypeComplementBancaire: 'required',
            banque: {
                    required: {
                        depends: function(nomBanque){
                            return $('#paiement input[type=radio]:checked').val() != "CB";
                        }
                    }
            },
            numeroComplementBancaire: {
                    required: {
                        depends: function(numeroCompl){
                            return $('#paiement input[type=radio]:checked').val() != "CB";
                        }  
                    }
            },
            montantComplementBancaire: {
                    required: {
                        depends: function(montantCompl){
                            var logg = montantRentre >= panierTotal;
                            console.log(logg);
                            return montantRentre >= panierTotal;
                        }
                    }
            }
    },
    messages: {
     referenceTypeComplementBancaire: "",
     banque:"",
     numeroComplementBancaire:"",
     montantComplementBancaire:""
    }
    });
}

答案 2 :(得分:1)

required: function(montantCompl){ 
    var logg = montantRentre >= panierTotal; 
    console.log(logg); 
    return montantRentre >= panierTotal; 
}

为什么要定义一个你从未使用的参数function(montantCompl){?你的意思是真的要与之进行比较吗?即使你没有,在匿名函数中使用全局变量进行比较也不是一个好主意,因为它会导致模糊,就像现在我正试图帮助你解决问题一样。如果在某处定义了这些值,请在您的问题中包括它们,包括它们改变状态的任何点。