来自变量的jquery验证规则参数

时间:2018-05-21 16:27:14

标签: javascript jquery jquery-validation-engine

我有current_stock变量,每次点击编辑按钮时都会被ajax请求更新。在ajax请求成功之后,它将弹出一个这样的模态 enter image description here

我使用jQuery验证来验证表单。其中一条规则是max。我试图将最大值设置为current_stock变量。 我试着这个:

$("#form_detail").validate({
    rules: {
        jumlah: {
            required: true,
            number: true,
            max: current_stock
        }
    },
    messages: {
        jumlah: {
            required: "Jumlah tidak boleh kosong.",
            number: "Jumlah hanya dapat diisi dengan angka.",
            max: "Tidak bisa melebihi sisa Stok"
        }
    },
    submitHandler: function(form) {
        save_edit();
    }
});

但它始终表示current_stock变量为0。 我试图使用控制台打印变量,变量值是正确的。但验证中的值始终为0。 这是我初始化current_stok变量

的地方
 <script type="text/javascript">
        var base_url = "<?php echo base_url()?>";
        var current_stock = 0;
 </script>

这是发出ajax请求并弹出模态

的函数
    function edit_jumlah(id_penjualan, id_barang) {
    $.ajax({
        url: base_url + "index.php/transaksi/get_by_id/" + id_penjualan + "/" + id_barang,
        type: "GET",
        dataType: "JSON",
        success: function(data) {
            $('[name="harga"]').val(data.harga_jual);
            $('[name="id_penjualan"]').val(data.id_penjualan);
            $('[name="id_barang_modal"]').val(data.id_barang);
            $('[name="nama_barang"]').val(data.nama_barang);
            $('[name="jumlah"]').val(data.jumlah);
            $('[name="sisa_stok"]').val(data.stok);
            current_stock = data.stok;
            $("#modal_detail").modal("show");
        },
        error: function(jqXHR, textStatus, errorThrown) {

        }
    })
}

这是验证功能

 $("#form_detail").validate({
        rules: {
            jumlah: {
                required: true,
                number: true,
                max: sisa_stok
            }
        },
        messages: {
            jumlah: {
                required: "Jumlah tidak boleh kosong.",
                number: "Jumlah hanya dapat diisi dengan angka."
            }
        },
        submitHandler: function(form) {
            save_edit();
        }
    });

2 个答案:

答案 0 :(得分:1)

问题是jQuery验证器使用变量值而不是它的引用:在验证初始化时,curent_stock的值为0,因此这将是传递给验证器的值,而不是对变量的引用。

要实现这一点,您应该在每次完成ajax调用时修改字段规则,而不是:

current_stock = data.stok;

success功能中,将其更改为:

$('[name="jumlah"]').rules('add', {
    required: true,
    number: true,
    max: data.stok,
    messages: {
        required: "Jumlah tidak boleh kosong.",
        number: "Jumlah hanya dapat diisi dengan angka.",
        max: "Tidak bisa melebihi sisa Stok"
    },
});

答案 1 :(得分:0)

正如穆埃卡斯在答案中解释的那样:

  

问题是jQuery验证器使用变量值,而不是   它的参考:在验证初始化的那一刻   curent_stock的值为0,因此这将是传递给的值   验证器,而不是对变量的引用。

但是,您不需要重写元素上的所有规则以使其工作。这是太多的代码冗余和违反DRY(不要重复自己)的原则。您需要做的就是使用新值max更新data.stok规则:

$.ajax.success中,更改此行:

current_stock = data.stok;

为:

$('#jumlah').rules('add', {
  max: data.stok
});

除非您需要其他内容,否则您不需要变量current_stock。在$("#form_detail").validate中,只需给出一个静态值:

max: 0