layui table 使用tab键切换单元格

本文介绍如何在layui表格中利用JavaScript实现Tab键切换单元格焦点,提升前端表单编辑的用户体验。
<script src="${ctx}/static/lib/jquery-3.4.1/jquery-3.4.1.min.js"></script>
<script>
    /*
        *编辑数据表格,键盘快捷键方法。
        *可跳过无编辑属性的列
        *tab 右边一个单元格
        *shift + tab 左边一个单元格
        *enter 下一行的单元格
        *shift + enter 上一行的单元格
        */
    //支持tab+enter 的切换
    $(document).on('keydown keyup', '.layui-input',
        function (event) {
            var td = $(this).parent('td'),
                index = td.index(),
                tr = td.parent('tr'),
                isShift = $(document).data('shift'),
                isKeydown = (event.type == "keydown");
            switch (event.key) {
                case "Shift":
                    $(document).data('shift', isKeydown);
                    break;
                case "Tab":
                    event.preventDefault();
                    isKeydown && td[isShift ? 'prevAll' : 'nextAll']('[data-edit="text"]:first').click();
                    break;
                case "Enter":
                    isKeydown && tr[isShift ? 'prev' : 'next']().children('td').eq(index).click();
                    break;
            }
        });
    //方向键的切换
    $(document).on('keydown', '.layui-table-edit', function (e) {
        var td = $(this).parent('td'),
            tr = td.parent('tr'),
            trs = tr.parent().parent().find("tr")
        tr_index = tr.index(),
            td_index = td.index(),
            td_last_index = tr.find('[data-edit="text"]:last').index(),
            td_first_index = tr.find('[data-edit="text"]:first').index();

        switch (e.keyCode) {
            case 13:
            case 39:
                td.nextAll('[data-edit="text"]:first').click();
                if (td_index == td_last_index) {
                    tr.next().find('td').eq(td_first_index).click();
                    if (tr_index == trs.length - 1) {
                        trs.eq(0).find('td').eq(td_first_index).click()
                    }
                }
                setTimeout(function () {
                    $('.last-table-edit').select()
                }, 0)
                break;
            case 37:
                td.prevAll('[data-edit="text"]:first').click();
                setTimeout(function () {
                    $('.last-table-edit').select()
                }, 0)
                break;
            case 38:
                tr.prev().find('td').eq(td_index).click();
                setTimeout(function () {
                    $('.last-table-edit').select()
                }, 0)
                break;
            case 40:
                tr.next().find('td').eq(td_index).click();
                setTimeout(function () {
                    $('.last-table-edit').select()
                }, 0)
                break;
        }
    });


</script>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值