1

我即将实现一个相当庞大的表单的验证。在某些情况下,我必须比较(条件)不同的输入值来验证。

给出以下示例:

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();,因为我认为它会强制验证重新验证整个表单并使用更新的值,但没有成功!

我可以寻求帮助吗?

干杯,

诺伯特

4

3 回答 3

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()

于 2012-11-14T05:06:19.887 回答
1

谢谢nrodic,

你给了我我需要的提示:) 因为我没有按照你的建议来工作,所以我采取了类似的方式来让它工作。

这是我现在使用的代码,它正在使用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
}

谢谢你的帮助!!

诺伯特

于 2012-11-14T22:36:31.373 回答
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"));

干杯

于 2012-11-15T02:26:13.880 回答