laravel - 基于先前选择的动态下拉列表

Posted

技术标签:

【中文标题】laravel - 基于先前选择的动态下拉列表【英文标题】:laravel - dynamic dropdown list based on previous selection 【发布时间】:2016-02-13 02:45:55 【问题描述】:

我有一个从我的数据库中填充的下拉列表,但我正在尝试创建一个基于第一个列表选择的第二个下拉列表。

第二个下拉列表内容有一个指向第一个下拉列表内容的 FK:

 project table         assignment table
 id|project_name       id|project_id|labour_type
  1|abc                 1|         1|....
  2|def                 2|         1|....
  3|..                  3|         2|....

我正在生成第一个下拉列表 -

控制器:

$projects = DB::table('project')->lists('project_name', 'id');

表格:

!! Form::select('project', $projects) !!

我什至不知道如何为第二个下拉菜单启动控制器查询。

我是 laravel/php 的新手,但对 jQuery/ajax 完全不熟悉,我知道我必须使用它来避免刷新页面以更新第二个下拉列表。任何帮助表示赞赏。

编辑:让两个下拉列表都是来自分配表的查询,并找到不同的方式在第一个下拉列表中显示项目名称是否有意义?

谢谢。

【问题讨论】:

两种可能的解决方案:1) 使用 ajax 2) 或者使用下拉更改事件并预先填充数据库中的数据。 使用 ajax 我可以过滤我的数据库查询吗?对不起,我从来没有使用过ajax。如果我只是拉出所有分配并将它们放在下拉列表中,我可以使用 ajax 仅在从上一个下拉列表中选择的项目的 id 上显示加入项目和分配表的那些? 是的,学习 ajax。这不是那么难。如果你有 jQuery 的知识,那不会花太多时间。 我不了解 jquery,但知道我可以在 mysql 上使用 ajax 就足以让我入门,谢谢 【参考方案1】:

我刚刚看到你的问题,所以我会尽力回答。

首先,您需要在您的第一个 select 元素上收听 change 事件,不确定它是什么,因为它不在问题中,但现在我将其称为 dropdown-1,例如<select id="dropdown-1"></select>

$(document).on('change', '#dropdown-1', updateDropdown2);

它的作用是在dropdown-1 中的值发生变化时调用updateDropdown2 函数。

var statusChanger = function () 

    var $select = $(this); // the select menu that was changed
    var projectID = $select.val();

    // send ajax request
    $.ajax(
        type: 'get',
        url:'/controller/action',
        data: 
            project_id: projectID
        ,
        success: function(data) 

            var options = '';
            // you might want an empty option, so you could do
            // var options = '<option value=""></option>';

            // assuming that your data is being return as json
            $.each(data, function(i, item) 
                // loop through the json and create an option for each result
                options += '<option value="' + item.id + '">' + item.labour_type + '</option>';
            );

            // update dropdown 2
            $('#dropdown-2).empty().html(options);
            // the empty isn't needed since
            // .html() will replace the contents
            // but it's just to make it obvious what is happening

        
    );

这里我在一些变量前面加上$ 符号,这只是一些人用来表示元素包含jQuery 对象的约定,而不仅仅是字符串、整数等。

您需要实施的一些事情:

ajax 请求的路由(例如,将url:'/controller/action', 替换为您在路由文件中定义的实际网址 记得在页面中包含 jQuery 库

用于处理 ajax 请求的控制器和操作,示例如下:

public function getLabourTypes(Request $request)


    $labourTypes = LabourType::where('project_id', $request->project_id)->orderBy('labour_type', 'asc')->get();

    return $labourTypes->toJson();

请注意,我根本没有对此进行测试,因此可能会出现一些错误,但它应该可以帮助您了解您想要实现的大部分内容。

【讨论】:

以上是关于laravel - 基于先前选择的动态下拉列表的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 动态下拉国家和州

根据 python plotly dash 中先前单选项目/下拉列表中的选择禁用下拉列表

根据先前的选择填充下拉列表

如何在编辑页面的下拉列表中获取先前选择的值

在 Laravel 中刷新页面后保留下拉列表中的动态值

基于下拉列表中选项的选择动态更新表格的Angularjs代码