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();フォーム全体を更新された値で再検証することを検証に強制すると思ったので試しましたが、成功しませんでした!

助けを求めてもいいですか?

乾杯、

Norbert

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

ありがとう

あなたは私に必要なヒントをくれました:)あなたの提案でうまくいかなかったので、私はそれを機能させるためにちょっと似たような方法で行きました。

これが私が今使用しているコードです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

申し訳ありませんが、以前のソリューションでバグを見つけました。次のことを知ってもらいたいだけです。

float 値と比較したいのですが、現時点では 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 に答える