You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery Validation规则中current_stock变量值无法更新问题求助

解决jQuery Validate规则中current_stock变量无法动态更新的问题

这个问题我之前也碰到过,核心原因是jQuery Validate的规则在初始化时是静态解析的:当你调用$("#form_detail").validate()时,max: current_stock会立即取当时current_stock的初始值(也就是0),之后哪怕你通过Ajax更新了current_stock变量,验证规则里的数值并不会自动同步。

下面给你两种可行的解决方案:

方案一:动态更新验证规则(在Ajax成功后手动同步)

在Ajax的success回调里,更新完current_stock之后,手动修改Validate的规则,让它使用最新的库存值:

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;
            
            // 重点:更新Validate的max规则
            $("#form_detail").validate().settings.rules.jumlah.max = current_stock;
            // 或者用rules方法先移除再添加,兼容性更好
            // $('[name="jumlah"]').rules('remove', 'max');
            // $('[name="jumlah"]').rules('add', { max: current_stock });
            
            $("#modal_detail").modal("show");
        },
        error: function(jqXHR, textStatus, errorThrown) {
        }
    })
}

方案二:使用动态函数作为规则值(更优雅的方式)

jQuery Validate允许规则的值是一个函数,这个函数会在每次验证时被调用,这样就能实时获取current_stock的最新值,不用手动更新规则。直接修改你的验证函数:

$("#form_detail").validate({
    rules: {
        jumlah: {
            required: true,
            number: true,
            // 把max改成函数,每次验证时返回最新的current_stock
            max: function() {
                return 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();
    }
});

这个方案更推荐,因为它不需要在Ajax回调里额外处理规则更新,每次验证都会自动拉取最新的库存值,逻辑更简洁。

内容的提问来源于stack exchange,提问作者Mochamad Ramdanny Lukman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:28:31