如何在每次调用时强制jQuery Validation重新验证整个表单?

时间:2012-11-14 04:38:54

标签: jquery validation clear-cache

我即将意识到一个非常庞大的形式的验证。 在某些情况下,我必须比较(条件)不同的输入值来验证。

以下示例:

function frmDealValidation () {
   var validator = $("#frmDeal").validate({
      rules: {
        product_value: {
             required: true,
             number: true,
             min: 0.01,
         }
         price: {
             required: true,
             number: true,
             min: 0.01,
             max: ($("#show_value1").is(':checked')) ? $("#product_value").val() : 1000000
         }
      },
      submitHandler: function(form) {
          form.submit();
      }
  });
}

如上所示,max-check取决于选中的单选按钮并返回一个值。 这意味着价格不允许大于实际的product_value。

假设填写的价格高于product_value,则在第一个表单提交后验证工作正常。

现在我可以更改输入中的值以更正错误,或者如果我是愚蠢的,我再次使用无效值填充它们并点击提交按钮(调用frmDealValidation ())。

不幸的是,验证没有更新$("#product_value").val()的值,似乎使用了第一次提交时的缓存值。

我试过validator.resetForm();因为我认为它会强制验证重新验证整个表单并使用更新的值但没有成功!

我可以请求帮助吗?

干杯,

诺贝特

3 个答案:

答案 0 :(得分:2)

我会这样:

$.validator.methods.priceMaxValidator = function(value, element, param) {
    return ($("#show_value1").is(':checked')) 
        ? $("#product_value").val() : param.max
}

然后在验证器设置中:

price: {
    required: true,
    number: true,
    min: 0.01,
    priceMaxValidator: { max: 100000 }
}

这种验证插件会在每次价格验证时调用priceMaxValidator,并且每次都会评估验证表达式。您不需要resetForm()

答案 1 :(得分:1)

非常感谢,

你给了我需要的提示:) 由于我没有按照你的建议工作,所以我采取了类似的方式让它发挥作用。

以下是我现在使用的代码,它使用addMethod()

$.validator.addMethod("checkIfLessThanValue", function(value, element, params) {
    if(params) {
        return this.optional(element) || (($("#show_value1").is(':checked') && ($("#price").val() > $("#deal_value").val()))) ? false : true;
    } else {
        return true;
    }
}, $.format("The Price is greater than Deal Value"));

以下是我使用方法的规则:

price: {
    required: true,
    number: true,
    min: 0.01,
    checkIfLessThanValue: true
}

感谢您的帮助!!

诺贝特

答案 2 :(得分:0)

我很抱歉,我刚刚在我以前的解决方案中发现了一个错误,只是想让你知道:

我们想要与浮点值进行比较,但我们目前仅比较STRINGS,这是修复: 我需要使用parseFloat()

$.validator.addMethod("checkIfLessThanValue", function(value, element, params) {
    if(params) {
        return this.optional(element) || (($("#show_value1").is(':checked') && (parseFloat($("#price").val()) > parseFloat($("#deal_value").val())))) ? false : true;
    } else {
        return true;
    }
}, $.format("The Price is greater than Deal Value"));

干杯