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
相关产品推荐
相关产品推荐

