You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在使用AJAX的jQuery DataTable中实现单行/多行选择

实现jQuery DataTable单行/多行选择及选中数据获取

要解决你的问题,需要在DataTable配置中启用选择功能,并添加对应的交互逻辑来获取选中行数据,以下是具体实现步骤:

1. 启用DataTable选择功能

根据需求选择单行或多行模式,修改DataTable初始化代码:

多行选择(带复选框)

添加复选框列和选择配置,支持批量选择:

$("#DATATABLE").DataTable({
    serverSide: true,
    filter: true,
    searchDelay: 1000,
    scrollY: StaticData.TABLE_HEIGHT + 'px',
    lengthMenu: StaticData.TABLE_PAGE_SIZE,
    language: { searchPlaceholder: "Name, Teacher" },
    scrollCollapse: true,
    // 启用多行选择
    select: {
        style: 'multi',
        selector: 'td:first-child'
    },
    ajax: {
        url: '/STUD_MANAGEMENT/LoadStud',
        type: 'GET',
        datatype: 'json',
        headers: { 'RequestVerificationToken': 'your json token' },
        data: (d) => {                    
            return { draw: d.draw, start: d.start, length: d.length, search: d.search.value, FilterByColumn: d.columns[d.order[0].column].data, ASC_DSEC: d.order[0].dir }
        },
        beforeSend: () => { ShowLoader(); },
        complete: () => { HideLoader(); },
        dataSrc: (json) => {
            json = json.data;                    
            return json;
        }
    },
    columnDefs: [
        { className: "dt-center", targets: [5, 6, 7, 8, 11], width: '2%' },
        { className: "dt-body-center", targets: 0 }
    ],
    columns: [
        // 新增复选框列
        { 
            data: null, 
            title: '<input type="checkbox" id="select-all">', 
            orderable: false, 
            render: (data, type, row) => `<input type="checkbox" class="row-select" data-stud-id="${row.STUD_ID}">`
        },
        { data: 'STUD_ID', title: 'STUD ID', autoWidth: false, visible: false },
        { data: 'CLASS_ID', title: 'CLASS ID', autoWidth: false, visible: false },
        { data: 'NAME', title: 'Name', autoWidth: true, searchable: true },
        { data: 'AGE', title: 'Age', autoWidth: true },
        { data: 'TEACHER', title: 'Teacher', autoWidth: true },               
    ]            
});

// 全选/取消全选逻辑
$('#select-all').on('click', function() {
    const table = $('#DATATABLE').DataTable();
    const rows = table.rows({ search: 'applied' }).nodes();
    $('input[type="checkbox"]', rows).prop('checked', this.checked);
    this.checked ? table.rows({ search: 'applied' }).select() : table.rows({ search: 'applied' }).deselect();
});

// 行内复选框同步选中状态
$('#DATATABLE').on('change', '.row-select', function() {
    const table = $('#DATATABLE').DataTable();
    const row = table.row($(this).closest('tr'));
    this.checked ? row.select() : row.deselect();
});

单行选择(点击整行选中)

若只需单行选择,简化配置即可:

$("#DATATABLE").DataTable({
    // 保留原有配置...
    select: {
        style: 'single' // 启用单行选择,点击整行触发
    },
    // 保留原有columns配置,无需添加复选框列
});

2. 添加按钮并实现选中数据获取

在页面中添加按钮:

<button id="get-selected-btn" class="btn btn-primary">获取选中数据</button>

编写获取选中数据的脚本:

$('#get-selected-btn').on('click', function() {
    const table = $('#DATATABLE').DataTable();
    const selectedRows = table.rows({ selected: true }).data();
    const selectedData = [];

    selectedRows.each(row => {
        selectedData.push({
            STUD_ID: row.STUD_ID,
            CLASS_ID: row.CLASS_ID,
            NAME: row.NAME,
            AGE: row.AGE,
            TEACHER: row.TEACHER
        });
    });

    // 可根据需求处理数据,例如打印、提交后端
    console.log('选中数据:', selectedData);

    // 提交到后端示例
    /*
    $.ajax({
        url: '/STUD_MANAGEMENT/ProcessSelected',
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify(selectedData),
        success: res => console.log('处理成功:', res),
        error: err => console.error('处理失败:', err)
    });
    */
});

3. 后端接收数据(可选)

若需将选中数据提交到后端,在STUD_MANAGEMENT控制器添加方法:

[HttpPost]
public IActionResult ProcessSelected([FromBody] List<STUD_MANAGEMENT> selectedData)
{
    // 处理选中数据,例如批量更新、删除等
    foreach(var item in selectedData)
    {
        // 示例逻辑:输出选中的学生ID
        Console.WriteLine($"选中学生ID: {item.STUD_ID}");
    }
    return Ok(new { Success = true, Message = "数据处理完成" });
}

关键注意事项

  • 确保引入DataTables Select扩展:若使用CDN,需添加以下资源:
    <link rel="stylesheet" href="https://cdn.datatables.net/select/1.7.0/css/select.dataTables.min.css">
    <script src="https://cdn.datatables.net/select/1.7.0/js/dataTables.select.min.js"></script>
    
  • 修复控制器中的类型错误:STUD_MANAGEMENT类的AGE是int类型,但示例中赋值为字符串(如dm.AGE = "12"),需改为整数:dm.AGE = 12,避免JSON序列化失败。

内容的提问来源于stack exchange,提问作者KitKat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:58:09