EasyUI入门2 datagrid复选框全选效果(通过约束条件实现部分项参与的全选效果)

需求

datagrid如果有一些项因为约束条件(比如这一项需要显示出来,但是复选框是disable的),那么在点击全选或全否复选框的时候,这些状态是disable的行是不应该被选中的。

无废话直接上代码

<table id="dgMRList" class="easyui-datagrid" style="width:100%;height:auto" data-options="rownumbers: true, 
    singleSelect: false, 
    checkOnSelect:true,
    method: 'get',
    onClickRow : onClickMRRow,
    onDblClickRow : onDblClickMRRow,
    onCheckAll : onCheckAllMR,
    onUncheckAll : onUncheckAllMR">
    <thead>
        <tr>
            <th data-options="field:'ck',checkbox:true"><input type="checkbox" id="ckAll" name="DataGridCheckbox" /></th>
            <th data-options="field:'RSGUID'" hidden="hidden">RSGUID</th>
            <th data-options="field:'项目ID'" hidden="hidden">项目ID</th>
            <th data-options="field:'KSGUID'" hidden="hidden">KSGUID</th>
            <th data-options="field:'请购单号'">请购单号</th>
            <th data-options="field:'请购单名称'">请购单名称</th>
            <th data-options="field:'请购单状态代码'" hidden="hidden">请购单状态代码</th>
            <th data-options="field:'请购单状态描述'">请购单状态描述</th>
            <th data-options="field:'询价状态'">询价状态</th>
        </tr>
    </thead>
</table>
<script type="text/javascript">
    function onClickMRRow(rowIndex, rowData) {
        //根据询价状态值 单击单选行不可用
        if (rowData.询价状态 == "已询价") {
            $('#dgMRList').datagrid('unselectRow', rowIndex);
        } 
    }
    function onDblClickMRRow(rowIndex, rowData) {
        //根据询价状态值 双击单选行不可用
        if (rowData.询价状态 == "已询价") {
            $('#dgMRList').datagrid('unselectRow', rowIndex);
        } 
    }

    //我草这么个破效果还得自己手工写 2017.6.23
    function onCheckAllMR(rows) {
        $("input[name='DataGridCheckbox']").each(function (index, el) {
            if (el.checked == true) {
                el.checked = false;
                $.each(rows, function (i, n) {
                    $("#dgMRList").datagrid('uncheckRow', i);  //此处参考其他人的代码,原代码为unselectRow
                });
            }
            else {
                el.checked = true;
                $.each(rows, function (i, n) {
                    if (n.询价状态 == "已询价") {
                        $("#dgMRList").datagrid('uncheckRow', i);  
                    }
                    else {
                        $("#dgMRList").datagrid('checkRow', i);  
                    }
                });
            }
        });
    }

    function onUncheckAllMR(rows) {
        $("input[name='DataGridCheckbox']").each(function (index, el) {
            if (el.checked == true) {
                el.checked = false;
                $.each(rows, function (i, n) {
                    $("#dgMRList").datagrid('uncheckRow', i);  
                });
            }
        });
    }
</script>

说明

1.以下四个方法都是必须的,不然效果不能完整实现

function onClickMRRow(rowIndex, rowData)
function onDblClickMRRow(rowIndex, rowData)
function onCheckAllMR(rows)
function onUncheckAllMR(rows)

2.解释一下为什么onCheckAllMR需要下面这段if

if (el.checked == true) {
    el.checked = false;
    $.each(rows, function (i, n) {
        $("#dgMRList").datagrid('uncheckRow', i);  //此处参考其他人的代码,原代码为unselectRow
    });
}

因为如果没有这个if的话在选项无disable的时候无bug,但是当有选项为disable的时候,就会出现“取消勾选的时候点第一下全部取消,点第二下的时候没有全部选中,要点第三下才会全部选中”的bug。

3.为什么反选不用$(“#dgMRList”).datagrid(‘uncheckAll’),而要用each遍历一行行地取消

因为uncheckAll方法会触发function onUncheckAllMR(rows) 函数,导致function onUncheckAllMR(rows) 执行两次。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiangcns

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值