js-模拟easyui-datagrid表格各行选中事件-实现逻辑

2024-09-03 19:18

本文主要是介绍js-模拟easyui-datagrid表格各行选中事件-实现逻辑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

鉴于easyui-datagrid一旦使用于大数据,则会非常卡顿,这里模仿easyui-datagrid实现行选中事件的逻辑


var tableObj = {domIdName:'actCarTable',data:[],//表格数据isSelectedTrIndex:[],//被选中行的索引isDblclick:null,//是否双击selectRowArr:[], //选中行数据数组isSelectRowId:[], //是否被选中selectAllDelArr: [],//全选后,按住ctrl剔除的数组dbclickId:'',//双击的iddbclickIndex:'defaultVal',//双击的行号 初始化值为 defaultValisHoverRefresh:false,//进入表格区,滚动才允许执行// isBysing:true,//是否允许滚动触发事件// timeId:null,//滚动延时执行isCtrlKey:0, //挑选isShiftKey:0, //连续多选isSelecAll:0 //全选
}



//按下键
document.onkeydown = function(e){// console.log('keyNum: '+keyNum);var keyNum=window.event ? e.keyCode :e.which;       //获取被按下的键值  if(e.ctrlKey && keyNum == 65){ //全选tableObj.isSelecAll = 2;tableObj.isShiftKey=3;//shift键tableObj.isCtrlKey = tableObj.isShiftKey = 3;// 清除之前已选中的行样式// 清除之前已选中的行数据}else if(keyNum==17){  //按住ctrl键// console.log('按住ctrl键: '+keyNum);// console.log(tableObj.isCtrlKey);tableObj.isCtrlKey = 1;}else if(keyNum==16){//shift键// console.log('shift键: '+keyNum);// console.log(tableObj.isShiftKey);tableObj.isShiftKey=1;}}
	//键盘松开document.onkeyup = function(){if(tableObj.isCtrlKey==1){tableObj.isCtrlKey =2;//松开}else if(tableObj.isShiftKey==1){tableObj.isShiftKey=2;//松开立即切换}else if(tableObj.isSelecAll==1){tableObj.isSelecAll=2;//全选}}



$('#'+tableObj.domIdName).hover(function(){//鼠标进入tableObj.isHoverRefresh = true;// console.log('进入-活动车辆列表: '+tableObj.isHoverRefresh);// refreshList();},function(){//鼠标离开tableObj.isHoverRefresh = false;// console.log('离开-活动车辆列表: '+tableObj.isHoverRefresh);}).click(function(e){// 活动车辆列表-单击委托事件parent.$('#rightMenu1').hide();var actCarData = parent.actCarLargeSet.allData.actCarData;if(actCarData.length<=0)return false;e = e || window.event;var target = e.target || e.srcElement;//兼容处理if(target.parentNode.getAttribute('isHeadTr')){//头部事件绑定console.log('头部事件绑定');var statu = target.getAttribute('statu');if(statu==0){//升序 - 第一次点击前,需保存排序前的数据}else if(statu==1){//降序}else if(statu==2){//恢复点击前数据}//先清空旧数据}else{ //非头部事假-数据行事件绑定// console.log('tbody');setTimeout(function(){if(tableObj.isDblclick)return;if(tableObj.isCtrlKey==1){// 上一步是全选,下一步按住ctrl,选中即剔除if(tableObj.isSelecAll==2){
}else if(tableObj.isSelectRowId[devid]){//重复选择,删除数组中该相关数据,同时修改该行样式}else{}tableObj.isCtrlKey = 2;}else if(tableObj.isShiftKey==1){// shift 连续多选if(tableObj.isSelecAll==2){//上一步是全选,则去除全选的效果}}else{//单选if(tableObj.isSelecAll==2){//上一步是全选,下一步是单选,则去除全选的效果}}tableObj.isShiftKey = tableObj.isSelecAll = tableObj.isCtrlKey=3;// 3 意味着不再考虑},200);}tableObj.isDblclick = false;}).dblclick(function(e){// 活动车辆列表-双击委托事件e = e || event;var target = e.target || e.srcElement;//兼容处理if(!target.parentNode.getAttribute('isHeadTr')){//双击数据行生效(双击表头行无效)console.info('双击');}});


这篇关于js-模拟easyui-datagrid表格各行选中事件-实现逻辑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1133812

相关文章

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

基于SpringBoot实现文件秒传功能

《基于SpringBoot实现文件秒传功能》在开发Web应用时,文件上传是一个常见需求,然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余,此时可以使用文件秒传技术通过识别重复... 目录前言文件秒传原理代码实现1. 创建项目基础结构2. 创建上传存储代码3. 创建Result类4.

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专