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

Laravel5中实现联动下拉菜单:根据首菜单值填充次菜单

嘿,我来帮你搞定这个动态联动下拉的需求!其实分前端和后端两部分就能实现,一步步来:

第一步:修正第一个下拉的选项值

你现在第一个下拉的option value是空的,这没法让后端识别选中的公司。得把公司的ID作为value传进去,修改后的代码如下:

<div class="form-group">
    {{Form::label('company', 'Company')}}
    <select class="form-control" id="company" name="company">
        @foreach($company as $key)
            <option value="{{$key->id}}">{{$key->name}}</option> <!-- 这里把value设为公司ID -->
        @endforeach
    </select>
</div>
第二步:搭建第二个下拉的容器

先把第二个下拉的架子搭好,默认显示提示文本,比如假设第二个是部门(你可以换成自己的业务字段):

<div class="form-group">
    {{Form::label('department', 'Department')}}
    <select class="form-control" id="department" name="department">
        <option value="">请先选择公司</option>
    </select>
</div>
第三步:前端监听下拉变化,请求后端数据

用jQuery来实现会比较简洁(如果项目没引入jQuery,换成原生JS的fetch API也一样)。在页面底部添加这段脚本:

<script>
$(document).ready(function() {
    // 监听公司下拉的选择变化
    $('#company').on('change', function() {
        const selectedCompanyId = $(this).val();
        const departmentDropdown = $('#department');
        
        // 如果没选公司,重置第二个下拉
        if (!selectedCompanyId) {
            departmentDropdown.html('<option value="">请先选择公司</option>');
            return;
        }
        
        // 发送AJAX请求到后端获取对应数据
        $.ajax({
            url: '/get-related-data', // 这个路由要和后端定义的一致
            type: 'GET',
            data: { company_id: selectedCompanyId },
            success: function(response) {
                // 清空原有选项,添加新数据
                departmentDropdown.empty();
                departmentDropdown.append('<option value="">请选择对应选项</option>');
                $.each(response, function(index, item) {
                    departmentDropdown.append(`<option value="${item.id}">${item.name}</option>`);
                });
            },
            error: function() {
                departmentDropdown.html('<option value="">加载失败,请重试</option>');
            }
        });
    });
});
</script>
第四步:后端编写路由和数据接口

首先在routes/web.php里添加一个路由:

Route::get('/get-related-data', [YourController::class, 'getRelatedData']);

然后在对应的控制器里实现getRelatedData方法,根据传过来的公司ID查询关联数据,返回JSON格式:

public function getRelatedData(Request $request)
{
    $companyId = $request->query('company_id');
    // 替换成你自己的模型查询逻辑,比如关联表的where条件
    $relatedData = YourModel::where('company_id', $companyId)->select('id', 'name')->get();
    
    return response()->json($relatedData);
}
小提示
  • 如果你用原生JS,把AJAX部分换成fetch即可,逻辑完全一致。
  • 建议给模型建立关联关系(比如Company模型定义hasMany关联),这样查询代码会更规范。
  • 可以在请求过程中给第二个下拉加个“加载中...”的选项,提升用户体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:31:37