首页 web前端 js教程 前端基于JQgrid实现自定义列头展示

前端基于JQgrid实现自定义列头展示

Jun 26, 2017 pm 02:30 PM
前端 基于 实现 自定义

先上效果图  

因为公司项目的需要,并且公司只有我这一个能写js的前端,这个自定义展示jqgrid列选项的需求依然是交由我写,辣么就分享一下我的工作成果。

  1 //初始化函数  2 multiSelectColInit();  3 //调用下拉多选点击事件以及对应传参  4   5 function multiSelectColInit() {  6     multiSelect = {  7         //ajaxmodelnames: [], //此jqgrid列头名称对应的id数组用于传给后台  8         contorlJqgridCol: function(names, modelnames, kehuSelectHides, ajaxHideIds) {  9             var self = $("input[data-multiselect]"), 10                 selfHei = self.outerHeight(true), //点击input的高度 11                 self_offset_top = self.offset().top, 12                 self_left = self.offset().left, 13                 selectHides = selectSames(modelnames, kehuSelectHides), 14                 self_top = self_offset_top + selfHei, 15                 multi_select = '<div class=multiSelect><ul><li class="ckAllLi"><input type="checkbox" checked="true" class="ckAllBox">全选</li>', 16                 len = names.length, //总列数 17                 hideLen = selectHides.length, //隐藏的列数 18                 showLen = len - hideLen, //显示的列数 19                 selfStr = '共有' + len + '列,显示' + showLen + '列,隐藏' + hideLen + '列', //17.5.4新增 20                 //ajaxnames = [], //此jqgrid列头名称数组用于传给后台 21                 ajaxmodelnames = selectHides; //此jqgrid列头名称对应的id数组用于传给后台 22             if (hideLen > 0) { 23                 multi_select = '<div class=multiSelect><ul><li class="ckAllLi"><input type="checkbox" class="ckAllBox">全选</li>'; 24             } 25             for(i = 0; i < len; i++) { 26                 if(selectHides.indexOf(modelnames[i]) > -1) { 27                     multi_select += '<li class="multiLi"><input type="checkbox" value=&#39; + modelnames[i] + &#39; class="multiCheckBox">' + names[i] + '</li>'; 28                 } else { 29                     multi_select += '<li class="multiLi"><input type="checkbox" checked="true" value=&#39; + modelnames[i] + &#39; class="multiCheckBox">' + names[i] + '</li>'; 30                 } 31  32             } 33             multi_select += '</ul></div>'; 34             $('body').append(multi_select); 35             $('.multiSelect').css({ 36                 'top': self_top, 37                 'left': self_left 38             }); 39             //新增初次加载input框内显示有多少列,多少列默认没有显示 40             self.val(selfStr); 41             self.attr('showcol', showLen); 42             //17-5-8 新增窗口大小改变事件重新定位多选框 43             $(window).resize(function () { 44                 if ($('.multiSelect').length) { 45                     var selfHei = self.outerHeight(true), //点击input的高度 46                     self_offset_top = self.offset().top, 47                     self_left = self.offset().left, 48                     self_top = self_offset_top + selfHei; 49                     $('.multiSelect').css({ 50                         'top': self_top, 51                         'left': self_left 52                     }); 53                 } 54  55             }); 56             $("input[data-multiselect]").click(function(e) { 57                 stopPropagation(e); 58                 if($('.multiSelect').length) { 59                     $('.multiSelect').show(); 60                 } 61             }) 62             $('.multiSelect').click(function(e) { 63                 stopPropagation(e); 64             }) 65             $(document).on("click", function() { 66                 if($('.multiSelect').length && $('.multiSelect').is(":visible")) { 67                     $('.multiSelect').hide(function() { //回调是否保存数据 68                         ajaxHideIds(ajaxmodelnames); 69                     }); 70                 } 71             }) 72             $(".multiCheckBox").click(function(e) { 73                 stopPropagation(e); 74                 var val = $(this).attr("value"), 75                     showcol = parseInt(self.attr('showcol')), 76                     newshowcol = 0; 77                 if(!$(this).prop("checked")) { //如果当前选中 78                     $("#gridlist").jqGrid('hideCol', val); 79                     newshowcol = showcol - 1; 80                     ajaxmodelnames.push(val); 81                 } else { 82                     $("#gridlist").jqGrid('showCol', val); 83                     newshowcol = showcol + 1; 84                     ajaxmodelnames.remove(val); 85                 } 86                 var newnoshowcol = len - newshowcol; 87                 selfStr = '共有' + len + '列,显示' + newshowcol + '列,隐藏' + newnoshowcol + '列'; //17.5.4新增 88                 self.val(selfStr); 89                 self.attr('showcol', newshowcol); 90             }) 91             $('.multiLi,.ckAllLi').click(function (e) { 92                 stopPropagation(e); 93                 var ChildInput = $(this).find('input'); 94                 ChildInput.trigger('click'); 95             }) 96             $(".ckAllBox").click(function (e) {//全选input的全选点击事件 97                 stopPropagation(e); 98                 if ($(this).prop("checked")) {//应该全部隐藏 99                     $(".multiCheckBox").each(function (index, obj) {100                         var _this = $(obj);101                         if (!_this.prop("checked")) {102                             _this.trigger("click");103                         }104                     })105 106                 } else {107                     $(".multiCheckBox").each(function (index, obj) {108                         var _this = $(obj);109                         if (_this.prop("checked")) {110                             _this.trigger("click");111                         }112                     })113                 }114             })115 116         },117         jqgridHiddenColInit: function(opt, modelnames, kehuSelectHides) { //opt为传入的jqgrid的option.model118             var objModel = opt,119                 objModelLen = objModel.length;120             for(var k = 0; k < objModelLen; k++) {121                 if(selectSames(modelnames, kehuSelectHides).indexOf(objModel[k].name) > -1) {122                     objModel[k].hidden = true;123                 }124             }125             return objModel;126         }127     }128 129 }130 131 function stopPropagation(e) {132     window.event ? window.event.cancelBubble = true : e.stopPropagation();133 }134 135 function selectSames(arr1, arr2) { //选择前面2个数组中重复的赋值给第三个参数数组136     //arr1是jqgrid自带的所有modelname的id集合137     //arr2是客户选择的需要隐藏的jqgrid的id集合138     //arr3是返回2个数组中重复的id集合139     var arr3 = [];140     for(var s in arr1) {141         for(var x in arr2) {142             if(x != 'remove') {143                 if(arr2[x] == arr1[s]) {144                     arr3.push(arr1[s]);145                 }146             }147         }148     }149     return arr3;150 }151 152 Array.prototype.indexOf = function(val) {153     for(var i = 0; i < this.length; i++) {154         if(this[i] == val) return i;155     }156     return -1;157 };158 Array.prototype.remove = function(val) {159     var index = this.indexOf(val);160     if(index > -1) {161         this.splice(index, 1);162     }163 };
登录后复制

 

上面的是我封装好的函数代码,现在看一下html页面需要给予什么参数以及在哪里调用。

  1 <!DOCTYPE html>  2 <html>  3   4 <head>  5     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  6     <meta http-equiv="X-UA-Compatible" content="IE=100">  7     <title></title>  8     <link href="../content/css/homeCommon.css?1.1.11" rel="stylesheet" />  9     <link href="../content/plugins/jqgrid/ui.jqgrid.css?1.1.11" rel="stylesheet" /> 10     <style> 11         .multiSelect { 12             display: none; 13             position: absolute; 14             background:rgba(255,255,255,0.8); 15             border: 1px solid #dfdfdf; 16             color:#000; 17         } 18             .multiSelect li, .multiSelect input { 19                 cursor: pointer; 20                 margin: 5px 3px 5px 2px; 21             } 22             .multiSelect ul{ 23                 height:250px;/*高度可以自定义*/ 24                 overflow:auto; 25             } 26             .box{ 27             border-bottom:0; 28         } 29     </style> 30 </head> 31  32 <body> 33     <div class="content"> 34         <div class="content10"> 35             <div class="box-body box"> 36                 <div> 37                     <!--<span style="width:500px;display:inline-block;"></span>--> 38                     表头配置: 39                     <input type="text" data-multiselect style="width: 180px;"> 40                 </div> 41             </div> 42             <table class="jqgrid" id="gridlist"></table> 43             <div id="gridpage"></div> 44         </div> 45         </div> 46         <script src="../content/js/jquery-1.11.0.js?1.1.11"></script> 47         <script src="../content/plugins/multiSelectControlJqgridCol/jqgrid动态控制列显示隐藏.js?1.1.11"></script> 48         <script src="../content/plugins/jqgrid/jquery.jqGrid.min.js?1.1.11"></script> 49         <script> 50             $(function () { 51                 //names=[jqgrid的列头名称,这个值负责下拉列表的名称显示] 52                 //modelnames=[jqgrid列头名称对应的id,这个值控制jqgrid的列显示隐藏] 53                 //names数组与modelnames数组2个值必须一一对应 54                 var names = ['常用', '流水号', '疫苗种类', '疫苗信息', '包装(支/件)', '生产企业', '库存量', '采购数量', '采购价(元)', '采购金额(元)', '生产注册号(隐藏)'], 55                     modelnames = ['ISCU', 'DRUGID', 'DRUGTYPE', 'PRODUCTNAME', 'PACKUNIT', 'COMPANYNAME_SC', 'STORAGECOUNT', 'PURCHASECOUNT', 'ACTUALPRICE', 'COMPANYID_SC'], 56                     //kehuSelectHides后台取值----客户选定的隐藏的列数据 57                     kehuSelectHides = ['ISCU', 'DRUGID', '1111', '2222', 'STORAGECOUNT']; 58                     //kehuSelectHides = []; 59  60                 //ajaxHideIds 是定义的隐藏下拉框之后调用的回调函数 61                 multiSelect.contorlJqgridCol(names, modelnames, kehuSelectHides, function (data) { 62                     //第四个function是定义的隐藏下拉框之后调用的回调函数(data是需要隐藏的列id集合) 63                     alert(data); 64  65                 }); 66                 //jqgrid初始化 67                 var obj = { 68                     "names": ['常用', '流水号', '疫苗种类', '疫苗信息', '包装(支/件)', '生产企业', '库存量', '采购数量', '采购价(元)', '采购金额(元)', '生产注册号(隐藏)'], 69                     "model": [{ 70                         name: 'ISCU', 71                         index: 'ISCU', 72                         width: 50, 73                         align: 'center', 74                         sortable: false, 75                         //fixed: true, 76                         //resizable:false, 77                         formatter: function (cellvalue, options, rowObject) { 78                             if (cellvalue == "1") { 79                                 return "<a style=&#39;cursor:pointer;&#39; onclick=&#39;btdel(\"" + rowObject.DRUGID + "\");&#39;>加入</a>"; 80                             } else { 81                                 return "<a style=&#39;cursor:pointer;&#39; onclick=&#39;btAdd(\"" + rowObject.DRUGID + "\");&#39;>取消</a>"; 82                             } 83                         } 84                     }, 85                         { 86                             name: 'DRUGID', 87                             index: 'DRUGID', 88                             width: 100, 89                             align: 'center', 90                             sortable: false 91                             //fixed: true 92                         }, 93                         { 94                             name: 'DRUGTYPE', 95                             index: 'DRUGTYPE', 96                             width: 170, 97                             align: 'left', 98                             //resizable: false, 99                             sortable: false,100                             //fixed: true101                         },102                         {103                             name: 'PRODUCTNAME',104                             index: 'PRODUCTNAME',105                             width: 315,106                             align: 'left',107                             sortable: false,108                             //resizable: false,109                             //fixed:true110 111                         },112                         {113                             name: 'PACKUNIT',114                             index: 'PACKUNIT',115                             width: 80,116                             align: 'center',117                             sortable: false118                         },119                         {120                             name: 'COMPANYNAME_SC',121                             index: 'COMPANYNAME_SC',122                             width: 200,123                             align: 'left',124                             sortable: false125                         },126                         {127                             name: 'STORAGECOUNT',128                             index: 'STORAGECOUNT',129                             width: 80,130                             align: 'center',131                             sortable: false,132                             formatter: function (cellvalue, options, rowObject) {133                                 return "<span  class=&#39;label pull-center bg-blue&#39;>" + cellvalue + "</span>";134                             }135                         },136                         {137                             name: 'PURCHASECOUNT',138                             index: 'PURCHASECOUNT',139                             width: 150,140                             align: 'center',141                             sortable: false,142                             formatter: function (cellvalue, options, rowObject) {143                                 return "<button id=\"" + rowObject.DRUGID + "_reduce\" type=\"button\" onclick=\"btnReduce(this.id)\" title=\"-\" style=\"width:20px;padding: 1px;background-color: #F6F2F2;border:1px solid #dfdfdf\">-</button><input type=\"text\" id=\"" + rowObject.DRUGID +144                                     "_PURCHASECOUNT\" value=\"0\" style=\"width:40px;text-align:center;margin:0 3px;height:19px\" maxlength=\"5\" onchange=\"showValue(this.id,&#39;" + rowObject.COMPANYNAME_SC + "&#39;,&#39;" + rowObject.PRODUCTNAME + "【" + rowObject.YMMEDICINEMODEL + " " + rowObject.YMOUTLOOKC + " " + rowObject.DRUGFACTOR + rowObject.FORMULATION + "/" + rowObject.YMUNIT + "】&#39;,&#39;" + rowObject.PACKUNIT + "&#39;)\" onfocus=\"foc(this.id)\"/><button class=\"addThis\" type=\"button\" id=\"" + rowObject.DRUGID +145                                     "_add\" onclick=\"btnAdd(this.id,&#39;" + rowObject.COMPANYNAME_SC + "&#39;,&#39;" + rowObject.PRODUCTNAME + "【" + rowObject.YMMEDICINEMODEL + " " + rowObject.YMOUTLOOKC + " " + " " + rowObject.DRUGFACTOR + rowObject.FORMULATION + "/" + rowObject.YMUNIT + "】&#39;,&#39;" + rowObject.PACKUNIT + "&#39;)\" title=\"+\" style=\"width:20px;text-align:center;background-color: #F6F2F2;border:1px solid #dfdfdf;padding:1px\">+</button>";146                             }147                         },148                         {149                             name: 'ACTUALPRICE',150                             index: 'ACTUALPRICE',151                             width: 100,152                             align: 'right',153                             sortable: false154                         },155                         {156                             name: 'AMOUNT',157                             index: 'AMOUNT',158                             width: 130,159                             align: 'right',160                             sortable: false161                         },162                         {163                             name: 'COMPANYID_SC',164                             index: 'COMPANYID_SC',165                             width: 100,166                             align: 'center'167                         }168                     ]169                 };170 171                 gidData = [{172                     ACTUALPRICE: 1,173                     APPROVAL: "S20140114",174                     COMPANYID_SC: "J0383",175                     COMPANYNAME_SC: "Merck Sharp & Dohme Corp.",176                     COMPANYNAME_ZD: "北京科园信海医药经营有限公司",177                     DRUGFACTOR: "1",178                     DRUGID: "2",179                     DRUGTYPE: "23价肺炎球菌多糖疫苗",180                     FORMULATION: "瓶",181                     HOSPITALID: "JK003",182                     ISCU: "1",183                     NETPRICE: null,184                     PACKAGING: "玻璃西林瓶",185                     PACKUNIT: "144",186                     PRODUCTNAME: "23价肺炎球菌多糖疫苗",187                     REMARK: null,188                     STORAGECOUNT: 0,189                     YMMEDICINEMODEL: "注射液",190                     YMOUTLOOKC: "0.5ml/瓶",191                     YMUNIT: "盒",192                     AMOUNT: '10'193                 }];194 195                 //初始化隐藏jqgrid客户选择的列196                 obj.model = multiSelect.jqgridHiddenColInit(obj.model, modelnames, kehuSelectHides),197                 $("#gridlist").jqGrid({198                     /*            url: "stdGoods/getStdGoodsData.html",199                                 contentType : 'application/json',200                                 datatype: "json",*/201                     datatype: "local",202                     data: gidData,203                     //autowidth: true,204                     autowidth: false,205                     shrinkToFit: false, //默认不自适应206                     height: 270,207                     colNames: obj.names,208                     colModel: obj.model,209                     rowNum: 20,210                     rowList: [10, 20, 50, 100],211                     //rownumbers: true,212                     pager: "#gridpage",213                     viewrecords: true,214                     multiselect: true,215                     caption: "",216                     //postData: {"isUsing":1},217                     rownumbers: true, //隐藏jqgrid的序号218                     //序号宽度自动变化219                     gridComplete: function () {220                         var docHei = parseInt($("body").height()) - 9,221                             winHei = parseInt($(window).height()),222                             jqHei = parseInt($(".ui-jqgrid-bdiv").height());223                         if (docHei >= winHei) {224                             var Heit = docHei - winHei,225                                 tuHei = jqHei - Heit;226                             $(".ui-jqgrid-bdiv").css("height", tuHei);227                         } else {228                             var hei = winHei - docHei + jqHei;229                             $(".ui-jqgrid-bdiv").css("height", hei);230                         }231                         $(".jqgrid").jqGrid("setGridWidth", $(".content10")[0].offsetWidth - 20);232                         var ids = $("#gridlist").getDataIDs();233                         for (var i = 0; i < ids.length; i++) {234                             var id = ids[i];235                             jQuery("#gridlist").jqGrid('editRow', id);236                         }237                     },238 239                     jsonReader: {240                         repeatitems: false,241                         id: "goodsId"242                     }243                 });244                 $("#gridlist").jqGrid('navGrid', '#gridpage', {245                     add: false,246                     edit: false,247                     del: false,248                     search: false,249                     refresh: false250                 }).jqGrid('setFrozenColumns');251 252             });253         </script>254 255 </body>256 257 </html>
登录后复制

 

需要注意的几个点:

  • 1.参数选项需要看清楚,html和js里都有注释说明

  • 2.jqgrid的版本4.6.0

  • 3.jquery的版本1.11.0

这个功能的注意点主要是参数的传输以及何处调用,注意点搞清了,这个功能有需求的小伙伴们拿去用吧~~~

以上是前端基于JQgrid实现自定义列头展示的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

华为手机如何实现双微信登录? 华为手机如何实现双微信登录? Mar 24, 2024 am 11:27 AM

华为手机如何实现双微信登录?随着社交媒体的兴起,微信已经成为人们日常生活中不可或缺的沟通工具之一。然而,许多人可能会遇到一个问题:在同一部手机上同时登录多个微信账号。对于华为手机用户来说,实现双微信登录并不困难,本文将介绍华为手机如何实现双微信登录的方法。首先,华为手机自带的EMUI系统提供了一个很便利的功能——应用双开。通过应用双开功能,用户可以在手机上同

PHP编程指南:实现斐波那契数列的方法 PHP编程指南:实现斐波那契数列的方法 Mar 20, 2024 pm 04:54 PM

编程语言PHP是一种用于Web开发的强大工具,能够支持多种不同的编程逻辑和算法。其中,实现斐波那契数列是一个常见且经典的编程问题。在这篇文章中,将介绍如何使用PHP编程语言来实现斐波那契数列的方法,并附上具体的代码示例。斐波那契数列是一个数学上的序列,其定义如下:数列的第一个和第二个元素为1,从第三个元素开始,每个元素的值等于前两个元素的和。数列的前几个元

如何在华为手机上实现微信分身功能 如何在华为手机上实现微信分身功能 Mar 24, 2024 pm 06:03 PM

如何在华为手机上实现微信分身功能随着社交软件的普及和人们对隐私安全的日益重视,微信分身功能逐渐成为人们关注的焦点。微信分身功能可以帮助用户在同一台手机上同时登录多个微信账号,方便管理和使用。在华为手机上实现微信分身功能并不困难,只需要按照以下步骤操作即可。第一步:确保手机系统版本和微信版本符合要求首先,确保你的华为手机系统版本已更新到最新版本,以及微信App

edius自定义屏幕布局的操作流程 edius自定义屏幕布局的操作流程 Mar 27, 2024 pm 06:50 PM

1、下图是edius默认的屏幕布局,默认的EDIUS窗口布局是横向版式,因此在单显示器环境中,许多窗口是重叠在一起的,且预览窗口为单窗口模式。2、您可以通过【视图】菜单栏启用【双窗口模式】,使预览窗口同时显示播放窗口和录制窗口。3、您可以通过【视图菜单栏>窗口布局>常规】来恢复默认屏幕布局。另外您还可以自定义适合您的布局方式,并保存为常用屏幕布局:将窗口拖动成适合自己的布局,然后点击【视图>窗口布局>保存当前布局>新建】,在弹出的【保存当前布局】小窗口中输入布局名称,单击确定

PHP与Vue:完美搭档的前端开发利器 PHP与Vue:完美搭档的前端开发利器 Mar 16, 2024 pm 12:09 PM

PHP与Vue:完美搭档的前端开发利器在当今互联网高速发展的时代,前端开发变得愈发重要。随着用户对网站和应用的体验要求越来越高,前端开发人员需要使用更加高效和灵活的工具来创建响应式和交互式的界面。PHP和Vue.js作为前端开发领域的两个重要技术,搭配起来可以称得上是完美的利器。本文将探讨PHP和Vue的结合,以及详细的代码示例,帮助读者更好地理解和应用这两

掌握Golang如何实现游戏开发的可能性 掌握Golang如何实现游戏开发的可能性 Mar 16, 2024 pm 12:57 PM

在当今的软件开发领域中,Golang(Go语言)作为一种高效、简洁、并发性强的编程语言,越来越受到开发者的青睐。其丰富的标准库和高效的并发特性使它成为游戏开发领域的一个备受关注的选择。本文将探讨如何利用Golang来实现游戏开发,并通过具体的代码示例来展示其强大的可能性。1.Golang在游戏开发中的优势作为一种静态类型语言,Golang在构建大型游戏系统

PHP游戏需求实现指南 PHP游戏需求实现指南 Mar 11, 2024 am 08:45 AM

PHP游戏需求实现指南随着互联网的普及和发展,网页游戏的市场也越来越火爆。许多开发者希望利用PHP语言来开发自己的网页游戏,而实现游戏需求是其中一个关键步骤。本文将介绍如何利用PHP语言来实现常见的游戏需求,并提供具体的代码示例。1.创建游戏角色在网页游戏中,游戏角色是非常重要的元素。我们需要定义游戏角色的属性,比如姓名、等级、经验值等,并提供方法来操作这些

excel怎么自定义x轴和y轴?(excel坐标轴刻度如何自定义) excel怎么自定义x轴和y轴?(excel坐标轴刻度如何自定义) Mar 14, 2024 pm 02:10 PM

  在excel表格中,有时候可能需要插入坐标轴,能够更加直观地看到数据的变化趋势。还有些小伙伴不清楚怎么在表中插入坐标轴,接下来小编就跟大家分享一下excel自定义坐标轴刻度的方法吧。  坐标轴插入方法:  1、在excel界面中,选中数据。  2、在插入界面中,点击插入柱形图或条形图。  3、在展开的界面中,选择形图类型。  4、在表格右击界面中,点击选择数据。  5、在展开的界面中,进行自定义即可。

See all articles