我在项目中设计课程表的时候需要用到老师和分类之间的多级联动。
首先是一张效果图:
下面是实现的代码:
<body> <script type="text/javascript">
$(function(){
var editing ; //判断用户是否处于编辑状态
var flag ; //判断新增和修改方法
$('#set_schedule').datagrid({
idField:'id' ,
fitColumns: false ,
url:'scheduleAction_loadScheduleData.action?sureDocumentId='+$("#sureDocumentId").val() ,
striped: true ,
loadMsg: '数据正在加载,请耐心的等待...' ,
rownumbers:true ,
singleSelect : true,
frozenColumns:[[ {field:'ck' , checkbox:true}
]], columns:[[ { field:'dateTime' ,
title:'时间' ,
width:100 , align:'center' ,
editor:{ type:'datebox' ,
options:{ required:true ,
missingMessage:'时间必填!' ,
editable:false
} } }, { field:'morningTime' ,
title:'上午上课时间段' ,
width:126 , align:'center',
editor:{ type:'validatebox' ,
options:{ required:true ,
missingMessage:'时间段必填!'
} } }, { field:'morningCourse' ,
title:'上午课程' ,
width:100 , editor:{ type:'validatebox' ,
options:{ required:true ,
missingMessage:'课程必填!'
} } }, { field:'aa1' ,
title:'主讲老师分类' ,
width:100 , editor : { type : 'combobox',
options : { url:'codeTypeAction_search.action?parentId=0&type=27',
valueField:'id' ,
textField:'name',
onSelect:function(data){
var row = $('#set_schedule').datagrid('getSelected');
var rowIndex = $('#set_schedule').datagrid('getRowIndex',row);//获取行号
var thisTarget = $('#set_schedule').datagrid('getEditor', {'index':rowIndex,'field':'aa1'}).target;
var value = thisTarget.combobox('getValue');
var target = $('#set_schedule').datagrid('getEditor', {'index':rowIndex,'field':'bb1'}).target;
target.combobox('clear'); //清除原来的数据
var url = 'codeTypeAction_search.action?type=28&parentId='+value;
target.combobox('reload', url);//联动下拉列表重载
} } } }, { field:'bb1' ,
title:'主讲老师细类' ,
width:100 , editor : { type : 'combobox',
options : { url:'codeTypeAction_search.action?type=28',
valueField:'id' ,
textField:'name',
onSelect:function(data){
var row = $('#set_schedule').datagrid('getSelected');
var rowIndex = $('#set_schedule').datagrid('getRowIndex',row);//获取行号
var thisTarget = $('#set_schedule').datagrid('getEditor', {'index':rowIndex,'field':'bb1'}).target;
var value = thisTarget.combobox('getValue');
var target = $('#set_schedule').datagrid('getEditor', {'index':rowIndex,'field':'morningTeacherId'}).target;
target.combobox('clear'); //清除原来的数据
var url = 'teacherAction_search.action?teacherTypeId2='+value;
target.combobox('reload', url);//联动下拉列表重载
} } } }, { field:'morningTeacherId' ,
title:'主讲老师' ,
width:100 , editor : { type : 'combobox',
options : { url:'teacherAction_search.action',
valueField:'id' ,
textField:'name'
} } }, { field:'afternoonTime' ,
title:'下午上课时间段' ,
width:126 , align:'center' ,
editor:{ type:'validatebox' ,
options:{ required:true ,
missingMessage:'时间段必填!'
} } }, { field:'afternoonCourse' ,
title:'下午课程' ,
width:100 , editor:{ type:'validatebox' ,
options:{ required:true ,
missingMessage:'课程必填!'
} } }, { field:'aa2' ,
title:'主讲老师分类' ,
width:100 , editor : { type : 'combobox',
options : { url:'codeTypeAction_search.action?parentId=0&type=27',
valueField:'id' ,
textField:'name',
onSelect:function(data){
var row = $('#set_schedule').datagrid('getSelected');
var rowIndex = $('#set_schedule').datagrid('getRowIndex',row);//获取行号
var thisTarget = $('#set_schedule').datagrid('getEditor', {'index':rowIndex,'field':'aa2'}).target;
var value = thisTarget.combobox('getValue');
var target = $('#set_schedule').datagrid('getEditor', {'index':rowIndex,'field':'bb2'}).target;
target.combobox('clear'); //清除原来的数据
var url = 'codeTypeAction_search.action?type=28&parentId='+value;
target.combobox('reload', url);//联动下拉列表重载
} } } }, { field:'bb2' ,
title:'主讲老师细类' ,
width:100 , editor : { type : 'combobox',
options : { url:'codeTypeAction_search.action?type=28',
valueField:'id' ,
textField:'name',
onSelect:function(data){
var row = $('#set_schedule').datagrid('getSelected');
var rowIndex = $('#set_schedule').datagrid('getRowIndex',row);//获取行号
var thisTarget = $('#set_schedule').datagrid('getEditor', {'index':rowIndex,'field':'bb2'}).target;
var value = thisTarget.combobox('getValue');
var target = $('#set_schedule').datagrid('getEditor', {'index':rowIndex,'field':'afternoonTeacherId'}).target;
target.combobox('clear'); //清除原来的数据
var url = 'teacherAction_search.action?teacherTypeId2='+value;
target.combobox('reload', url);//联动下拉列表重载
} } } }, { field:'afternoonTeacherId' ,
title:'主讲老师' ,
width:100 , editor : { type : 'combobox',
options : { url:'teacherAction_search.action',
valueField:'id' ,
textField:'name'
} } }, { field:'eveningTime' ,
title:'晚上上课时间段' ,
width:126 , align:'center' ,
editor:{ type:'validatebox' ,
options:{ required:true ,
missingMessage:'时间段必填!'
} } }, { field:'eveningCourse' ,
title:'晚上课程' ,
width:100 , editor:{ type:'validatebox' ,
options:{ required:true ,
missingMessage:'课程必填!'
} } }, { field:'aa3' ,
title:'主讲老师分类' ,
width:100 , editor : { type : 'combobox',
options : { url:'codeTypeAction_search.action?parentId=0&type=27',
valueField:'id' ,
textField:'name',
onSelect:function(data){
var row = $('#set_schedule').datagrid('getSelected');
var rowIndex = $('#set_schedule').datagrid('getRowIndex',row);//获取行号
var thisTarget = $('#set_schedule').datagrid('getEditor', {'index':rowIndex,'field':'aa3'}).target;
var value = thisTarget.combobox('getValue');
var target = $('#set_schedule').datagrid('getEditor', {'index':rowIndex,'field':'bb3'}).target;
target.combobox('clear'); //清除原来的数据
var url = 'codeTypeAction_search.action?type=28&parentId='+value;
target.combobox('reload', url);//联动下拉列表重载
} } } }, { field:'bb3' ,
title:'主讲老师细类' ,
width:100 , editor : { type : 'combobox',
options : { url:'codeTypeAction_search.action?type=28',
valueField:'id' ,
textField:'name',
onSelect:function(data){
var row = $('#set_schedule').datagrid('getSelected');
var rowIndex = $('#set_schedule').datagrid('getRowIndex',row);//获取行号
var thisTarget = $('#set_schedule').datagrid('getEditor', {'index':rowIndex,'field':'bb3'}).target;
var value = thisTarget.combobox('getValue');
var target = $('#set_schedule').datagrid('getEditor', {'index':rowIndex,'field':'eveningTeacherId'}).target;
target.combobox('clear'); //清除原来的数据
var url = 'teacherAction_search.action?teacherTypeId2='+value;
target.combobox('reload', url);//联动下拉列表重载
} } } }, { field:'eveningTeacherId' ,
title:'主讲老师' ,
width:100 , editor : { type : 'combobox',
options : { url:'teacherAction_search.action',
valueField:'id' ,
textField:'name'
} } } ]] , pagination: true ,
pageSize: 10 , pageList:[5,10,15,20,50] , toolbar:[ { text:'新增课程',
iconCls:'icon-add' ,
handler:function(){
if(editing == undefined){
flag = 'add';
//1 先取消所有的选中状态 $('#set_schedule').datagrid('unselectAll');
//2追加一行 $('#set_schedule').datagrid('appendRow',{description:''});
//3获取当前页的行号 editing = $('#set_schedule').datagrid('getRows').length -1;
//4选中并开启编辑状态 $('#set_schedule').datagrid('selectRow',editing);
$('#set_schedule').datagrid('beginEdit', editing);
} } }/* ,{
text:'修改课程', iconCls:'icon-edit' , handler:function(){ var arr = $('#set_schedule').datagrid('getSelections'); if(arr.length != 1){ $.messager.show({ title:'提示信息', msg:'只能选择一条记录进行修改!' }); } else { if(editing == undefined){ flag = 'edit'; //根据行记录对象获取该行的索引位置 editing = $('#set_schedule').datagrid('getRowIndex' , arr[0]); //开启编辑状态 $('#set_schedule').datagrid('beginEdit',editing); } } } } */,{
text:'保存课程',
iconCls:'icon-save' ,
handler:function(){
//保存之前进行数据的校验 , 然后结束编辑并师傅编辑状态字段 if($('#set_schedule').datagrid('validateRow',editing)){
$('#set_schedule').datagrid('endEdit', editing);
editing = undefined; } } },{ text:'删除课程',
iconCls:'icon-remove' ,
handler:function(){
var arr = $('#set_schedule').datagrid('getSelections');
if(arr.length <= 0 ){
$.messager.show({ title:'提示信息',
msg:'请选择进行删除操作!'
}); } else {
$.messager.confirm('提示信息' , '确认删除?' , function(r){
if(r){
var ids = '';
for(var i = 0 ; i < arr.length ; i++){
ids += arr[i].id + ',';
} ids = ids.substring(0,ids.length-1); $.post('scheduleAction_delete.action' , {ids:ids},function(result){
$('#set_schedule').datagrid('reload');
$.messager.show({ title:'提示信息',
msg:'操作成功!'
}); }); } else {
return ;
} }); } } },{ text:'取消操作',
iconCls:'icon-cancel' ,
handler:function(){
//回滚数据 $('#set_schedule').datagrid('rejectChanges');
editing = undefined; } } ] , onAfterEdit:function(index , record){
var data = $('#moduleform').serialize();
$.post(flag=='add'?'scheduleAction_addSchedule.action?'+data:'scheduleAction_updateSchedule.action' , record , function(result){
var data = $.parseJSON(result);
$('#set_schedule').datagrid('reload');
$.messager.show({ title:'提示信息',
msg:data.message }); },'text');
} }); }); </script> <form id="moduleform" method="post">
<s:hidden name="sureDocumentId" id="sureDocumentId"></s:hidden>
<table cellspacing="1" cellpadding="5" class="tb_background2" width="100%">
<tr> <td width="20%" class="td_right">总学时:</td>
<td width="28%" class="td_left">
<s:textfield name="totalLearnTime" id="totalLearnTime" size="32"/>学时
</td> <td width="20%" class="td_right">是否可见:</td>
<td width="28%" class="td_left">
<s:select list="#{'0':'可见','1':'不可见' }" cssStyle="width:200px;" name="type" id="type"></s:select>
</td> </tr> </table> </form> <table id="set_schedule"></table>
</body>