【问题标题】:How to force jQuery Validation to re-validate the whole form every time when called?每次调用时如何强制 jQuery Validation 重新验证整个表单?
【发布时间】:2012-11-02 14:44:23
【问题描述】:

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

给出以下示例:

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

我可以寻求帮助吗?

干杯,

诺伯特

【问题讨论】:

    标签: jquery validation clear-cache


    【解决方案1】:

    我会走这条路:

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

    【讨论】:

      【解决方案2】:

      谢谢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
      }
      

      感谢您的帮助!!

      诺伯特

      【讨论】:

      • 不客气。我认为addMethod() 是首选方式,因此您可能想接受自己的答案,只是为了结案。 :)
      【解决方案3】:

      对不起各位,我刚刚在我之前的解决方案中发现了一个错误,只是想让你们知道:

      我们想要比较浮点值,但我们现在只比较字符串,这里是修复: 我需要使用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"));
      

      干杯

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-21
        • 1970-01-01
        • 1970-01-01
        • 2015-03-05
        相关资源
        最近更新 更多