数据表中的数字格式问题

时间:2014-06-28 06:56:26

标签: javascript jquery datatables

我正在尝试使用fnFormatNumber函数格式化数字,如下所示。但它在javascript控制台中打印Uncaught TypeError: undefined is not a function

我该如何解决这个问题?

datatables

<script>
    $(document)
            .ready(
                    function() {
                        $("#dataTables-expense")
                                .dataTable(
                                        {
                                            "order" : [ [ 1, "desc" ] ],
                                            "aoColumnDefs" : [ {
                                                "bSortable" : false,
                                                "aTargets" : [ 0, 7 ]
                                            } ],
                                            'iDisplayLength' : 10,
                                            "aLengthMenu" : [
                                                    [ 10, 15, 25, 50, 100,
                                                            250, 500, -1 ],
                                                    [ 10, 15, 25, 50, 100,
                                                            250, 500, "All" ] ],
                                                            "fnFormatNumber": function ( iIn ) {
                                                                if ( iIn < 1000 ) {
                                                                  return iIn;
                                                                } else {
                                                                  var
                                                                    s=(iIn+""),
                                                                    a=s.split(""), out="",
                                                                    iLen=s.length;

                                                                  for ( var i=0 ; i<iLen ; i++ ) {
                                                                    if ( i%3 === 0 && i !== 0 ) {
                                                                      out = "'"+out;
                                                                    }
                                                                    out = a[iLen-i-1]+out;
                                                                  }
                                                                }
                                                                return out;
                                                              },                                                                
                                            "footerCallback" : function(
                                                    row, data, start, end,
                                                    display) {
                                                var api = this.api(), data;

                                                // Remove the formatting to get integer data for summation
                                                var intVal = function(i) {
                                                    return typeof i === 'string' ? i
                                                            .replace(
                                                                    /[\$,]/g,
                                                                    '') * 1
                                                            : typeof i === 'number' ? i
                                                                    : 0;
                                                };

                                                // Total over all pages
                                                data = api.column(3).data();
                                                total = data.length ? data
                                                        .reduce(function(a,
                                                                b) {
                                                            return intVal(a)
                                                                    + intVal(b);
                                                        })
                                                        : 0;

                                                // Total over this page
                                                data = api.column(3, {
                                                    page : 'current'
                                                }).data();
                                                pageTotal = data.length ? data
                                                        .reduce(function(a,
                                                                b) {
                                                            return intVal(a)
                                                                    + intVal(b);
                                                        })
                                                        : 0;

                                                // Update footer
                                                $(api.column(3).footer())
                                                        .html(this.fnFormatNumber(pageTotal));
                                            }
                                        });
                    });
</script>

1 个答案:

答案 0 :(得分:1)

这是因为fnFormatNumber是初始化选项/设置对象的一部分,而不是数据表对象本身this

您可以通过fnSettings()方法访问设置对象。变化

$(api.column(3).footer()).html(this.fnFormatNumber(pageTotal));

$(api.column(3).footer()).html(this.fnSettings().fnFormatNumber(pageTotal));

演示演示 - &gt;的 http://jsfiddle.net/q2GC3/