0

jQuery Validate を使用して数値の検証を試みていますが、ラジオ ボタンがチェックされている場合のみです。ラジオ ボタンがチェックされていない場合、フィールドは必須になりますが、ユーザーは英数字の値を挿入できます。問題は、フィールドが空かどうかのみを確認し、console.log に必要な値 (true または false) が表示されることですが、送信時にデータがサーバーに送信されます。これは私が持っているものです:

$("#new_redeem_coupon").validate({
    rules:{
        'redeem_coupon[confirmation_number]': {
            required: function(element){
                var v = $("#redeem_coupon_confirmation_number").attr("value");
                if($("#redeem_coupon_coupon_kind_0").attr("checked") == "checked"){
                    ret = (v == "");
                    console.log("VALUE1: " + ret);
                    return ret;
                }
                else{
                    var ret = (v == "" || isNaN(v));
                    console.log("VALUE2: " + ret);
                    return ret;
                }
            }
        }
    },
    errorPlacement:function(error, element){
        $(element).attr("title",error.html()).tooltip({track:true});
    },
    success:function(label){
    },
    errorClass: "invalid",
    focusCleanUp: true
});

次のコードも試しましたが、うまくいきませんでした。値は常に false のままです。

'redeem_coupon[confirmation_number]': { required:true, number: $("#redeem_coupon_coupon_kind_0").attr("checked") != "checked" }

よろしくお願いします。

パブロ・マルティ

4

1 に答える 1

2

解決策: http://docs.jquery.com/Plugins/Validation/rules#.22add.22rulesにリストされているaddおよびメソッドを使用します。remove

ルール:

$("#new_redeem_coupon").validate({
    rules:{
        'redeem_coupon[confirmation_number]': {required: true}
    },
    errorPlacement:function(error, element){
        $(element).attr("title",error.html()).tooltip({track:true});
    },
    success:function(label){
    },
    errorClass: "invalid",
    focusCleanUp: true
});

そして、無線経由でイベントを追加して、状況ごとにルールを追加および削除します。

$(".coupon_kind_opt").change(function(){
    if($("#redeem_coupon_coupon_kind_0").attr("checked") == "checked"){
        $("#redeem_coupon_confirmation_number").rules("remove", "number");
    }
    else{
        $("#redeem_coupon_confirmation_number").rules("add", {
            number: true
        });
    }
})
于 2012-12-12T15:44:14.553 に答える