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

Laravel动态新增表单时如何实时展示未选中的下拉选项

解决方法

核心思路是遍历所有托盘选择框的选中值,替换原有的仅收集前两个值的逻辑,修改后完整步骤如下:


1. 修改动态区块托盘加载的jQuery代码

将原来仅收集索引0和前一个区块值的逻辑,替换为遍历所有已存在的托盘选择框:

$(document).on('change', '.warehouse2', function(){
    var warehouseid = $(this).val(); 
    let idtarget  = $(this).data('idtarget');
    // 新增:收集所有已选的托盘ID
    let data = [];
    $('select[name^="slot_id"]').each(function() {
        let selectedVal = $(this).val();
        if(selectedVal && selectedVal !== '') {
            data.push(selectedVal);
        }
    });
    console.log(data); // 可查看完整的已选ID数组
    if(warehouseid){
        $.ajax({
            type:"GET",
            url:"/admin-user/get_slot_id_not_in?warehouseid="+warehouseid,
            data:{"data":data},
            dataType: 'JSON',
            success:function(res){             
            if(res){
                $("#slot_id" + idtarget).empty();
                $("#slot_id" + idtarget).append('<option>---Pilih Pallet---</option>');
                $.each(res,function(id_slot,id_slot){
                    $("#slot_id" + idtarget).append(
                      '<option value="'+id_slot+'">'+id_slot+'</option>'
                    );
                });
            }else{
                   $("#slot_id" + idtarget).empty();
            }
            }
        });
    }else{
            $("#slot_id" + idtarget).empty();
    }      
}); 

2. (可选优化)修改索引0的仓库变更逻辑

避免修改首个区块仓库时,出现已被后续区块选中的托盘选项,统一复用过滤接口:

$('#warehouse').change(function(){
    var warehouseid = $(this).val(); 
    // 同样收集所有已选托盘ID
    let data = [];
    $('select[name^="slot_id"]').each(function() {
        let selectedVal = $(this).val();
        if(selectedVal && selectedVal !== '') {
            data.push(selectedVal);
        }
    });
    if(warehouseid){
        $.ajax({
            type:"GET",
            url:"/admin-user/get_slot_id_not_in?warehouseid="+warehouseid,
            data:{"data":data},
            dataType: 'JSON',
            success:function(res){        
            if(res){
                $("#slot_id").empty();
                $("#slot_id").append('<option value="">-- Pilih Pallet --</option>');
                $.each(res,function(id_slot,id_slot){
                    $("#slot_id").append(
                      '<option value="'+id_slot+'">'+id_slot+'</option>'
                    );
                });
            }else{
                   $("#slot_id").empty();
            }
            }
        });
    }else{
            $("#slot_id").empty();
    }      
});

3. (可选补充)监听全局托盘选择变更

如果需要实现「修改前面已选的托盘后,后面所有区块的选项同步更新过滤规则」的效果,可以新增以下监听逻辑:

$(document).on('change', 'select[name^="slot_id"]', function() {
    // 所有区块的仓库ID默认统一,若允许不同仓库可自行调整对应逻辑
    let currentWarehouse = $('#warehouse').val() || $('.warehouse2:first').val();
    if(!currentWarehouse) return;
    // 收集所有已选ID
    let data = [];
    $('select[name^="slot_id"]').each(function() {
        let selectedVal = $(this).val();
        if(selectedVal && selectedVal !== '') {
            data.push(selectedVal);
        }
    });
    // 重新加载所有托盘下拉的选项
    $('select[name^="slot_id"]').each(function() {
        let $select = $(this);
        let currentVal = $select.val();
        $.ajax({
            type:"GET",
            url:"/admin-user/get_slot_id_not_in?warehouseid="+currentWarehouse,
            data:{"data":data.filter(v => v !== currentVal)}, // 过滤时排除当前下拉自身的选中值
            dataType: 'JSON',
            success:function(res){             
                if(res){
                    $select.empty();
                    $select.append('<option>---Pilih Pallet---</option>');
                    $.each(res,function(id_slot,id_slot){
                        let selected = id_slot === currentVal ? 'selected' : '';
                        $select.append(`<option value="${id_slot}" ${selected}>${id_slot}</option>`);
                    });
                    // 保留原来的选中值
                    if(currentVal) $select.val(currentVal);
                }else{
                    $select.empty();
                }
            }
        });
    });
});

后端控制器代码无需修改,原有whereNotIn逻辑可直接适配前端传过来的完整已选ID数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:45:02