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>
View Code

下面是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>
View Code

下面是测试数据

 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>
View Code

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>
View Code

 

 

posted @ 2014-06-03 18:01  金春鹤  阅读(1185)  评论(0)    收藏  举报