我有一个从我的数据库中填充的下拉列表,但我正在尝试制作基于第一个列表选择的第二个下拉列表。
第二个下拉列表内容的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并不熟悉,我知道这将是我必须使用的,以避免必须刷新页面来更新第二个下拉列表。任何帮助表示赞赏。
编辑:将两个下拉列表都从分配表中查询,并在第一个下拉列表中找到以不同的方式显示项目名称是否有意义?
感谢。
答案 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对象的约定,而不仅仅是字符串,整数等。
您需要实施的一些事项:
url:'/controller/action',
替换为您在路径文件中定义的实际网址处理ajax请求的控制器和操作,例如:
public function getLabourTypes(Request $request)
{
$labourTypes = LabourType::where('project_id', $request->project_id)->orderBy('labour_type', 'asc')->get();
return $labourTypes->toJson();
}
请注意,我根本没有对此进行过测试,因此可能会出现一些错误,但它应该会让您完全了解您要实施的内容。