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

Laravel-9/JavaScript库存告警问题:动态行库存校验失效

问题描述

动态添加发票行时,库存数量校验逻辑异常:仅第一行会使用对应商品的库存值判断,后续新增行仍沿用第一行的库存数值。例如选择水泥(库存3)、钢材(库存10)后,输入钢材销售数量超过3时仍触发错误提示。需求是实现keyup/click触发校验,当销售数量大于对应商品库存时提示Selling Quantity is more than Quantity in Stock。


核心问题原因

原代码直接通过$('#current_stock_qty').val()获取全局库存输入框的值,而动态新增的发票行未绑定各自对应的商品库存数据,导致所有行复用同一个全局库存值。


解决方案

1. 调整Handlebars模板,为每行添加独立库存存储字段

修改模板,在每行中新增隐藏输入框,用于存储当前行对应商品的库存值,确保每行拥有独立的库存数据:

<script id="document-template" type="text/x-handlebars-template">
    <td>
        <input type="number" min="1" class="form-control selling_qty text-right" name="selling_qty[]" value="">
        <!-- 新增隐藏字段,存储当前行商品的库存 -->
        <input type="hidden" class="row_stock_qty" name="row_stock_qty[]" value="">
    </td>
    <td>
        <input type="number" class="form-control unit_price text-right" name="unit_price[]" value="">
    </td>
</script>

2. 同步库存值到新增行的隐藏字段

在选择商品并新增发票行的逻辑中,将当前选中商品的库存值(即#current_stock_qty的值)同步到新行的隐藏字段中。示例代码如下(需根据你的实际新增行逻辑调整):

function addInvoiceRow() {
    var template = $('#document-template').html();
    var html = Handlebars.compile(template)();
    $('#addRow').append(html);
    // 将当前选中商品的库存赋值给新行的隐藏字段
    var currentStock = $('#current_stock_qty').val();
    $('#addRow tr:last').find('.row_stock_qty').val(currentStock);
}

3. 修正库存校验的JS代码

修改校验逻辑,读取当前行内的独立库存值,不再依赖全局的#current_stock_qty:

<script type="text/javascript">
    $(document).on('keyup click', '.unit_price,.selling_qty', function() {
        var $row = $(this).closest('tr');
        // 获取当前行的库存值和销售数量
        var current_stock_qty = $row.find('.row_stock_qty').val();
        var selling_qty = $row.find('.selling_qty').val();
        
        // 过滤空值或非数值的情况,避免逻辑错误
        if (!selling_qty || isNaN(selling_qty) || !current_stock_qty || isNaN(current_stock_qty)) {
            return;
        }
        
        // 转换为整数后比较
        selling_qty = parseInt(selling_qty);
        current_stock_qty = parseInt(current_stock_qty);
        
        if (current_stock_qty < selling_qty) {
            $.notify("Selling Quantity is more than Quantity in Stock", { 
                globalPosition: 'top right',
                className: 'error' 
            });
        }
    });
</script>

内容的提问来源于stack exchange,提问作者Basharmal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:40:52