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

时间:2015-11-11 21:31:21

标签: jquery mysql forms laravel dropdown

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

第二个下拉列表内容的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 个答案:

答案 0 :(得分:0)

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

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

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

这样做只要updateDropdown2中的值发生变化,就会调用dropdown-1函数。

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();
    }
    

请注意,我根本没有对此进行过测试,因此可能会出现一些错误,但它应该会让您完全了解您要实施的内容。