【问题标题】:JQuery DataTables To Show Totals In Footer And Default ViewJQuery DataTables 在页脚和默认视图中显示总计
【发布时间】:2017-08-14 13:35:06
【问题描述】:

我正在尝试使用 JQuery Datatables 在表的页脚中显示 SUM(),并默认为 50。我认为我的问题源于我缺乏 JQuery 经验,但我不确定。以下是我的语法:

$(document).ready(function() {
    $('#example').DataTable({
        dom: 'B<"clear">lfrtip',
        buttons: ['csv', 'excel', 'print'],
        "iDisplayLength": 50,
        footerCallback: function(row, data, start, end, display) {
            var api = this.api(),
                data;
            var intVal = function(i) {
                return typeof i === 'string' ?
                    i.replace(/[\$,]/g, '') * 1 :
                    typeof i === 'number' ?
                    i : 0;
            };
            var totalColumn = function(colNum) {
                // Total over all pages
                total = api
                    .column(colNum)
                    .data()
                    .reduce(function(a, b) {
                        return intVal(a) + intVal(b);
                    }, 0);
                pageTotal = api
                    .column(colNum, {
                        page: 'current'
                    })
                    .data()
                    .reduce(function(a, b) {
                        return intVal(a) + intVal(b);
                    }, 0);
                $(api.column(colNum).footer()).html(
                    '$' + pageTotal + ' ( $' + total + ' total)'
                );
            }
            totalColumn(2);
            totalColumn(3);
            totalColumn(4);
            totalColumn(5);
            totalColumn(6);
            totalColumn(7);
            totalColumn(8);
            totalColumn(9);
        }
    });
});

这会出现以下错误:

未捕获的类型错误:无法读取未定义的属性“sDefaultContent”
在 B (datatables.min.js:sourcemap:92)
在 t.Xb (datatables.min.js:sourcemap:196)
在 t.iterator (datatables.min.js:sourcemap:175)
在 t。 (datatables.min.js:sourcemap:199)
在 t。 (datatables.min.js:sourcemap:179)
在 t.data (datatables.min.js:sourcemap:178)
在 totalColumn (ar-detail-summary:468)
在 n.fn.init.footerCallback (ar-detail-summary:496)
在 datatables.min.js:sourcemap:150
在 Function.map (datatables.min.js:sourcemap:14)

如果我删除这些行(或将它们注释掉),则会显示网格(没有排序和显示按钮)。

    dom: 'B<"clear">lfrtip',
    buttons: ['csv', 'excel', 'print'],
    "iDisplayLength": 50,

应如何编辑此语法以提供默认排序 50、具有“打印”按钮以及在页脚中添加总和?

编辑
这就是我的表的设置方式和从 MS SQL 查询结果中填充的方式

$sql = "SELECT Top 1 * from testdata";
$db->setQuery($sql);
$rows = $db->loadObjectList();
$numberRows = count($rows);
if ($numberRows >= 1) {
    ?>
    <div id="dvdata">
        <table id="example">
            <thead>
                <tr>
                    <th>Name </th>
                    <th>Total Sale Amt </th>
                    <th>Total Invoice Amt </th>
                </tr>
            </thead>
            <tfoot>
                <tr>
                    <th></th>
                    <th></th>
                    <th></th>
                    <th></th>
                    <th></th>
                    <th></th>
                    <th></th>
                    <th></th>
                    <th></th>
                </tr>
            </tfoot>
            <?php
            foreach ($rows as $res) {
                print "<tr>";
                print "<td>" . $res->Name . "</td>";
                print "<td>" . "$" . number_format(round($res->tsa)) . "</td>";
                print "<td>" . "$" . number_format(round($res->tia)) . "</td>";
                print "</tr>";
            }
        } else {
            echo "<strong>Nothing To Show Here.</strong>";
        }
    }
    ?>
</table>
</div>

【问题讨论】:

  • 能否提供一下你使用的totalcolumn函数和html
  • @amitwadhwani - totalcolumn 函数包含在上面的 jquery 中,让我编辑我的帖子以包含生成表格的 html
  • 根据您的 foreach,您有 2 列带有数字(tsa 和 tia)。您正在为不存在的列执行 totalColumn 函数。通过 totalColumn(9) 注释掉或删除 totalColumn(3) 即可。
  • @c2willi - 删除 totalColumn(3) - 9 仍然出现相同的错误。
  • 我认为默认排序您指的是 iDisplayLength。这不是真正的排序,而是每页上可见的行数。不会真正影响您的页脚总和问题。我更新了小提琴jsfiddle.net/kbqf2hp9/1,现在它有更多行,iDisplayLength 为 5。仍然有效。如果您向小提琴添加额外的 (如您的示例中)并运行它,您将看到页脚逻辑中断。

标签: javascript jquery datatables datatables-1.10


【解决方案1】:

据我所知,参考这个答案是正确的:Change the default number of rows to display on one "page"

根据 DataTables 的版本,stackoverflow 问题的答案中列出了三种可能的解决方案。

我尝试从上面导入您的代码,并且我的 DataTable 内容显示,但在控制台中,按钮 print 仅出现一个错误。如果你仍然挣扎,请添加评论,我会看看我能做些什么。

希望这会有所帮助!

【讨论】:

  • 每个元素独立工作。即,我可以有 50 个默认记录和按钮,或者我可以有全部显示。当我尝试将它们添加在一起时,出现上述错误。
  • 添加所有代码并在我的数据表上运行后,它显示以下消息:未知按钮类型:打印
    ,所以我真的认为它的按钮打印有问题。希望对您有所帮助!
  • 我删除了“打印”选项,现在将加载数据表。它显示了默认的“50”,但如果我尝试将其更改为“25”,则它不会更新(或者如果我将其更改为“100”,它不会更新)所以某些事情仍在继续。当我检查开发控制台时,我收到与我的 OP 相同的错误....似乎该错误与排序功能有关,因为当我将排序从 50 更改为 25 或 50 更改为 100 时 - 产生了错误在开发控制台中。
  • 你有没有尝试在数据进入表格之前进行排序?只是为了澄清问题是否存在。此外,DataTables 包括 order:["number of column (starts with 0)","asc/desc"],在这种情况下可能会有所帮助。
  • 好吧,例如如果您已连接到数据库并从中获取数据,或者您有数据数组,则可以按特定值对每个循环进行排序,然后使用 DataTable API 具有的 add 方法将其写入数据表.
猜你喜欢
相关资源
最近更新 更多
热门标签