Layui表格选中指定行的radio单选框并滚动到该行

本文介绍如何使用LayuiTable组件在多行数据中通过外部输入内容,精确定位并选中指定行,进而对目标行进行操作。具体实现包括设置初始选中项、动态更新选中状态及滚动到指定行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

layui table有多行数据,通过外部输入内容,需要定位到指定行,选中改行,对改行进行操作。

HTML代码:

<body>
    <div class="layui-fluid">
        <input type="text" id="txt_id" />
        <table class="layui-hide" id="test" lay-filter="test"></table>
        <script type="text/html" id="toolbarDemo">
            <div class="layui-btn-container">
                <button class="layui-btn layui-btn-sm" lay-event="getCheckData">获取选中行数据</button>
                <button class="layui-btn layui-btn-sm" lay-event="SetChecked">设置选中行</button>
            </div>
        </script>

    </div>
    <script src="lib/jquery-1.9.1.min.js"></script>
    <script src="layui/layui.all.js"></script>
    <script src="lib/AjaxCommon.js"></script>
    <script>
        layui.use('table', function () {
            var table = layui.table;

            ajaxSend(false, 'http://data.app.local/api/test/hello', '', function (res) {
                if (res != '') {
                    console.log(res)
                    table.render({
                        elem: '#test'
                        , height: 'full-50'
                        , limit: Number.MAX_VALUE
                        , data: res.data
                        , toolbar: '#toolbarDemo'
                        , cols: [[
                            { type: 'radio' }
                            , { field: 'Id', width: '50%', title: 'ID', sort: true }
                            , { field: 'Name', width: '50%', title: 'Name', sort: true }
                        ]]
                        , page: false
                    });
                }
            },'get');

            //头工具栏事件
            table.on('toolbar(test)', function (obj) {
                var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
                switch (obj.event) {
                    case 'getCheckData'://获取选中行数据
                        var data = checkStatus.data;  
                        layer.alert(JSON.stringify(data));
                        break;
                    case 'SetChecked'://设置指定行
                        var id = $("#txt_id").val();
                        var tabledata = table.cache["test"]; //获取现有数据
                        console.log(tabledata)
                        var index = 0;
                        for (var i = 0; i < tabledata.length; i++) {
                            if (tabledata[i].Id == id) {
                                tabledata[i].LAY_CHECKED = true;
                                index = i;
                            }
                            else {
                                tabledata[i].LAY_CHECKED = false;
                            }
                        }
                        table.reload("test", {
                            data: tabledata,
                        })
                        //滚动到指定行
                        var cellHtml = $(".layui-table-main").find("tr[data-index=" + index + "]");
                        var cellTop = cellHtml.offset().top;
                        $(".layui-table-main").scrollTop(cellTop - 160);
                        break;
                };
            });
        });
    </script>
</body>

后台代码

public class LayUITableEntity
    {
        public string code { get; set; }
        public string msg { get; set; }
        public string count { get; set; }
        public object data { get; set; }
    }
    public class TestEntity
    {
        /// <summary>
        /// 这个字段用来标识radio是否选中
        /// </summary>
        public bool LAY_CHECKED { get; set; } = false;
        public string Id { get; set; }
        public string Name { get; set; }
    }
    [Route("/api/test")]
    public class TestController : ServiceController
    {
        [RouteHttpGet("hello")]
        public FormiumResponse HelloNanUI(FormiumRequest request)
        {
            List<TestEntity> teList = new List<TestEntity>();
            for (int i = 1; i <= 30; i++)
            {
                TestEntity te = new TestEntity()
                {
                    //初次载入,id为3的选中
                    LAY_CHECKED = i == 3 ? true : false,
                    Id = i.ToString(),
                    Name = "name" + i.ToString()
                };
                teList.Add(te);
            }
            LayUITableEntity layUITableEntity = new LayUITableEntity()
            {
                code = "0",
                count = teList.Count().ToString(),
                msg = "",
                data = teList
            };
            return Json(layUITableEntity);
        }
    }

实现效果:

### 实现Layui表格点击触发第一列单选框选中事件 为了实现在Layui框架中点击表格某一时自动选中该行对应的第一列单选框的功能,可以采用如下方式: 通过监听`row`事件来捕获用户的点击操作,利用jQuery选择器定位到目标单元格内的单选按钮模拟点击为。具体代码实现如下所示[^1]。 ```javascript var num = 0; // 定义全局变量用于防止多次点击同一造成重复响应 table.on('row(test)', function(obj){ var selector = "tr[data-index='" + obj.index + "']"; // 获取当前被点击的选择符 if(num !== selector){ num = selector; $(`.layui-table-view[lay-id='your_table_id'] ${selector} td:first-child div.layui-form-checkbox`).click(); // your_table_id 需替换为实际表格组件ID } }); ``` 上述脚本片段展示了如何绑定级点击处理器以及怎样精确找到指定位置上的控件完成状态切换动作。注意这里假设表头定义里已经声明了单选框作为首列元素之一;同时需确保`lay-id`参数匹配页面中存在的实例名称。 另外一种更为简洁的方式是直接调用DOM对象的方法设置其选中属性,刷新表单渲染以反映更改后的界面状态[^4]: ```javascript table.on('row(your_filter_name)', function(obj){ $("input:radio[name='"+obj.field.radioName+"']")[0].checked=true; layui.form.render('radio'); }) ``` 此段代码适用于场景较为简单的情况,在这种情况下可以直接访问特定名字空间下的输入项通过内置API通知视图层更新显示结果。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值