jqGrid下拉框的另一种二级联动实现,
在网上翻了好多资料也没有找到合适的方法,一气之下决定自己写一个,看来创造力是逼出来的。^^
之前一直纠结于edittype属性,所以一直不能从梅比乌斯怪圈里蹦出来,直到下午决定放弃的时候想起了强大的formatter属性。
转换思维很重要啊亲。
废话不多说,代码如下
1 <script type="text/javascript"> 2 var grid; 3 $(document).ready(function () { 4 grid = $("#grdTest1"); 5 initGrid([]); 6 //查询测试数据 7 $("#btnSearch").click(function () { 8 var data1 = [{ "Name": "Price", "Week": "mo", "Subject": "" }, 9 { "Name": "On Promotion", "Week": "tu", "Subject": "" }, 10 { "Name": "Magazine Advertisement", "Week": "th", "Subject": "" }, 11 { "Name": "Television Advertisement", "Week": "we", "Subject": "" }, 12 { "Name": "Manufacturer", "Week": "fr", "Subject": "" }, 13 ]; 14 fn_Grid(data1); 15 }); 16 //给jqGrid的下拉框注册change事件 17 $("#grdTest1").on("change", ".week", function (e) { 18 var week = $(this).val(); 19 var cellHtm = ""; 20 //获取新的subject下拉框数据 21 var celllist = getSubjects(week); 22 $(celllist).each(function (idx, row) { 23 cellHtm = cellHtm + "<option value='" + row.value + "' >" + row.name + "</option>"; 24 }); 25 //找到subject单元格的下拉框后赋值 26 $(this).parent().parent().find(".subject").empty().append(cellHtm); 27 }); 28 }); 29 </script>
下面是jqgrid部分
1 <script type="text/javascript"> 2 function fn_Grid(mydata) { 3 grid.clearGridData(); 4 grid.setGridParam({ 5 data: mydata 6 }) 7 .setGridWidth(document.documentElement.clientWidth - 334) 8 .setGridHeight(document.documentElement.clientHeight - 514) 9 .trigger("reloadGrid"); 10 } 11 12 function initGrid(mydata) { 13 grid.jqGrid({ 14 datatype: "local", 15 data: mydata, 16 colModel: [ 17 { name: 'Name', label: 'Name', width: 100, align: "center" }, 18 { name: 'Week', label: 'Week', width: 65, align: "center", formatter: fn_FormatCombo, unformat:fn_UnFormatCombo }, 19 { name: 'Subject', label: 'Subject', width: 100, align: "center", formatter: fn_FormatCombo2, unformat: fn_UnFormatCombo2,cellattr: } 20 ], 21 rowList: [10, 20, 30], 22 rownumbers: true, 23 viewrecords: true, 24 shrinkToFit: false, 25 pager: jQuery('#pager'), 26 width: document.documentElement.clientWidth - 334, 27 height: document.documentElement.clientHeight - 214 28 }); 29 } 30 //格式化Week列, 31 var fn_FormatCombo = function (cellvalue, options, rowObject) { 32 var cellHtm = "<select class='week' style='width:65px;margin:0px;'>"; 33 $(iweek).each(function (idx, row) { 34 var tselected = (row.value === cellvalue) ? "selected" : ""; 35 cellHtm = cellHtm + "<option value='" + row.value + "' "+tselected+">" + row.name + "</option>"; 36 }); 37 cellHtm = cellHtm + "</select>" 38 return cellHtm; 39 } 40 , fn_UnFormatCombo = function (cellvalue, options, cell) { 41 return $(".week", cell).val(); 42 } 43 //格式化Subject列 44 ,fn_FormatCombo2 = function (cellvalue, options, rowObject) { 45 var cellHtm = "<select class='subject' style='width:100px;margin:0px;'>"; 46 var celllist = getSubjects(rowObject.Week); 47 $(celllist).each(function (idx, row) { 48 var tselected = (row.value === cellvalue) ? "selected" : ""; 49 cellHtm = cellHtm + "<option value='" + row.value + "' " + tselected + ">" + row.name + "</option>"; 50 }); 51 cellHtm = cellHtm + "</select>" 52 return cellHtm; 53 }, 54 fn_UnFormatCombo2 = function (cellvalue, options, cell) { 55 return $(".subject", cell).val(); 56 }; 57 </script>
下面是测试数据
1 <script type="text/javascript"> 2 var iweek = [{ value: 'mo', name: '周一' }, { value: 'tu', name: '周二' }, { value: 'we', name: '周三' }, { value: 'th', name: '周四' }, { value: 'fr', name: '周五'}]; 3 function getSubjects(wk) { 4 switch (wk) { 5 case 'mo': 6 return [{ value: 'yw', name: '语文' }, { value: 'sx', name: '数学'}]; 7 break; 8 case 'tu': 9 return [{ value: 'en', name: '英语' }, { value: 'sx', name: '数学'}]; 10 break; 11 case 'we': 12 return [{ value: 'wl', name: '物理' }, { value: 'hx', name: '化学'}]; 13 break; 14 case 'th': 15 return [{ value: 'ty', name: '体育' }, { value: 'mu', name: '音乐'}]; 16 break; 17 case 'fr': 18 return [{ value: 'wh', name: '物化' }, { value: 'bi', name: '生物'}]; 19 break; 20 } 21 } 22 </script>
Html部分
1 <div> 2 <button type="button" id="btnSearch" class="btn"><i class="icon-star"></i>Search</button> 3 </div> 4 <div style="margin-top:10px;"> 5 <table id="grdTest1"></table> 6 <div id="pager"> 7 </div> 8 </div>
浙公网安备 33010602011771号