【easyUI】取消easyui行点击选中事件,智能通过勾选checkbox才能选中行

背景:项目中使用easyui作为前端架子。datagrid默认是点击行就选中此行然后变色。

需求:点击行不让此行选中;只能通过点击复选框才能选中某一行。

解决思路:

  1、写点击行函数function onClickRow(rowIndex,rowData){}

  2、查询当前datagrid所有选中行。

  3、遍历选中行。对比选中行索引和点击行的索引:如果点击行的索引在所有选中行中,则取消点击行的选中状态;如果不存在,则选中点击行。

代码:

<script type="text/javascript">
    // 行点击事件
    function rowClick(rowIndex,rowData){
        var rows = $("#datagrid").datagrid(‘getSelections‘);
        var tag = true;
        // 判断是否刚刚选中
        for(var i = 0;i<rows.length;i++){
            // 所有选中行中存在刚刚点击的行 则取消选中
            if($(‘#datagrid‘).datagrid(‘getRowIndex‘, rows[i])==rowIndex){
                // 取消选中此行
                $(‘#datagrid‘).datagrid(‘unselectRow‘,rowIndex);
                tag = false;
                break;
            }
        }
        // 判断是否刚刚取消
        if(tag){
            $(‘#datagrid‘).datagrid(‘selectRow‘,rowIndex);
        }
    }
</script>

延伸:

  在解决这个问题的时候看到js中Set对象的使用。如果使用Set对象,上面的代码则变成下面这样:

使用Set对象(此情景并不适用Set对象,为以后使用打下基础吧)

<script type="text/javascript">
    // 行点击事件
    function rowClick(rowIndex,rowData){
        var rows = $("#datagrid").datagrid(‘getSelections‘);
        var set = new Set();
        // 判断是否刚刚选中
        for(var i = 0;i<rows.length;i++){
            var currentIndex = $(‘#datagrid‘).datagrid(‘getRowIndex‘,rows[i]);
            set.add(currentIndex);
            // 所有选中行中存在刚刚点击的行 则取消选中
            if(currentIndex==rowIndex){
                // 取消选中此行
                $(‘#datagrid‘).datagrid(‘unselectRow‘,rowIndex);
            }
        }
        // 判断是否刚刚取消
        if(!set.has(rowIndex)){
            $(‘#datagrid‘).datagrid(‘selectRow‘,rowIndex);
        }
    }
</script>

原文地址:https://www.cnblogs.com/oldwei/p/10005929.html

时间: 2024-08-04 20:07:17

【easyUI】取消easyui行点击选中事件,智能通过勾选checkbox才能选中行的相关文章

CSS侧边栏,ng-click定义选中事件

本篇小随笔,记录下侧边栏的写法和ng-click点击选中事件.因为这个工程不让引用jQuery.所以ng-click选中事件用了一个比较笨的方法实现的. 下面是HTML页面 按 Ctrl+C 复制代码 按 Ctrl+C 复制代码 css部分引入了angular里面的bootstrap,它和bootstrap官网里面的还是有点区别的,可以直接去angularjs官网下载. 还有就是自己写的css样式.同时引入了angular.min.js.因为工程还需要使用嵌套路由的方式,所以引入了ui-rout

C#WinForm datagridview控件一选选一整行的效果实现时,取消第一行默认被选取的副效果

1 UI 2 code 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 usi

Easyui 去掉datagrid 行的样式,并点击checked 改边行颜色!

--最近客户提出的需求 全选高亮样式太丑,每行选中不需要背景图片颜色,字体变黑色,未选中变灰色. 先把代码和改变后的图片 贴出来. /* 初始化DataFrid数据 */ initDataGrid: function () { var pNumber = 0; var pSize = 10; $('#listBuyer').datagrid({ method: 'post', url: 'PR012_TradeRelationService.ashx?Method=GetPR012_TradeR

easyui的组合网格:combogrid的选中事件

jQuery EasyUI的API文档中写到: "数据表格下拉框事件完全扩展自combo(自定义下拉框)和datagrid(数据表格)" 这也就是说,我们完全可以将combo和datagrid的事件拿过来用.于是,combogrid的选中事件就是: $('#ip').combogrid('grid').datagrid({ onClickRow:function(rowIndex,rowData){ console.log("选中"); } }) 原文地址:http

SpringMVC+easyUI中datagrid行编辑模式(添加数据)实现_2014.5.2

一.概述 根据我们平常的习惯,一共有两种修改模式,一种是弹窗是修改,将原有的数据提取到dialog上,然后再重新提交到后台(好像easyui里面有个onAfterEdit,这个事件里面有三个参数,其中的一个参数就是发现数据是否有改变),而第二种方式就是实现行编辑模式,在原有的datagrid上添加一个空行,(本例是实现添加数据,不考虑原有数据). 二.实现 1.后台就不赘言了.直接上代码,但是我还是有个疑问,对于SpingMVC的Controller层次中的方法的**入参**,我在前台通过aja

Easyui Datagrid rownumbers行号四位、五位显示不完全的解决办法

Easyui Datagrid rownumbers行号四位.五位显示不完全的解决办法(引) 方法一: 相信很多人在使用easyui的时候都遇到过这个问题,当我们设置成显示Rownumber的时候,你会发现,如果Rownumber越来越大,达到三位数或者四位数的时候,Rownumber就显示不全了.这个问题纠结了不知道多少人,在群里和论坛里面都的都被问到无数次了. 以前也一直没有太认真考虑过要解决这个问题,恰好最近有点时间,就研究了一下,其实要解决也很简单,扩展一个方法就行了. 首先,从data

miniui 给表格行添加监听事件的几种方法以及点击某列列名数据不能排序的问题

最近在使用miniui框架做开发,在做表格行的点击监听事件中发现了几个属性,都可以起到监听效果但是执行的结果却大有不同.好了废话不多说,直接上代码. <div id="pageGrid" class="mini-datagrid" style="width: 100%; height: 100%; border:0;" url="${ctx}/tAXINFO/queryRepeat" autoload="tru

jquery easyui datagrid设置行样式 不可删除某行

rowStyler: function (index,row) { if (parseInt(row.ksrs) > 0) { return 'color:red'; } }, onLoadSuccess:function(data){ var rows = data.rows; for (var j = 0; j < rows.length; j++) { if (parseInt(rows[j]["ksrs"]) > 0) { $(".datagrid-

checkbox点击选中,再点击取消,并显示在文本框中

function checkItem(e,itemId) { var item = document.getElementById(itemId); var $items = $(item); if (e.checked) { var checkval = $items.val(); var str = $("#txtFilePath").val() + checkval; $("#txtFilePath").val(str); } else { var a = &