【问题标题】:Jquery Validation Plugin Method required( dependency-expression ) use ok but callback not working需要 Jquery 验证插件方法(依赖表达式)使用正常但回调不起作用
【发布时间】:2009-12-29 13:18:07
【问题描述】:

我正在努力完成这项工作; 此验证应用于支付表单,如您所见,只有 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 没有得到验证,即使我的控制台日志在正确的时间显示“真”或“假”。 我做错了什么?

--------------编辑------------------ ------------------------------------

我认为有某种误解,我的错。对不起各位。 这是表单最终的样子:

        $("#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”,而且我希望它在其 >= 到 panierTotal 时才有效

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

我让 tjis 更清楚了吗?

【问题讨论】:

标签: javascript jquery jquery-validate validation


【解决方案1】:

我认为您的验证设置不正确。每个表单元素的“必需”属性应该是一个 JavaScript 对象,其中“依赖”属性设置为一个函数,假设您尝试做的是条件要求。请参阅验证选项页面上的“规则”条目: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:""
    }
    });
}

【讨论】:

  • 我认为您误解了depends 选项。它不能与required 一起使用。 depends 选项用于禁用或启用更复杂的规则,例如emailremoteequalTo。将它与required 一起使用是多余的,如果不是不正确的话。
【解决方案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;
}

【讨论】:

  • 返回日志;返回“真”或“假”;至于回报(montantRentre >= panierTotal);这是我的问题;看起来它永远不会返回 true。
【解决方案3】:
required: function(montantCompl){ 
    var logg = montantRentre >= panierTotal; 
    console.log(logg); 
    return montantRentre >= panierTotal; 
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多