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

jQuery DataTable自定义保存按钮获取原始值而非更新值求助

问题原因

DataTable 默认会把初始化时的原始数据存在内部模型里,你修改单元格后只是改动了页面DOM的内容,但没同步更新DataTable内部的数据模型,所以用rows().data().toArray()拿到的始终是初始值。

解决方法

在获取数据前,先遍历所有单元格,把DOM中的最新值同步到DataTable的数据源中。核心是通过cell().data()方法,将页面上的修改写入DataTable内部存储。

修改后的代码
...,
{
    text: 'Save',
    action: function (e, dt, node, config) {
        // 同步DOM修改到DataTable内部数据
        dt.rows().every(function() {
            const row = this;
            this.nodes().to$().find('td').each(function(index) {
                // 若单元格用了输入框,需改成对应取值方式,比如$(this).find('input').val()
                const cellValue = $(this).text().trim();
                row.cell(index).data(cellValue);
            });
        });

        var json = JSON.stringify(dt.rows().data().toArray());
        var dat = $('#MainContent_ddlDate').val();
        var cols = ""

        dt.columns().header().each(function (e, i) {
            var col = jQuery(e).html();
            cols += col + ",";
        });
        
        $.ajax({
            type: "POST",
            url: 'Ranking.aspx/SaveRanks',
            data: JSON.stringify({ 'tbldata': json, 'cols':cols, 'surveydate': dat }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                window.location.reload();
            },
            error: function (e) {
                console.log(e); // 修正大小写:Console -> console
            }
        });
    }
}
补充提示

如果你的单元格是用输入框(input/select等)实现编辑的,需要把$(this).text()替换成对应获取输入值的代码,比如$(this).find('input').val(),根据实际的编辑组件调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:55:21