DataTables中的乘法

时间:2016-08-19 06:07:27

标签: javascript jquery datatables

所以我在下面有这个代码。

$(document).ready(function() {

    function getCodeNameSpecsSize(data, type, dataToSet) {
        return data[3] + ", " + data[4] + ", " + data[5] + ", " + data[6];
    }

    function getTotalPrice(data, type, dataToSet) {
        return data[7] * data[9];
    }
    
    var table = $('#incoming_material').dataTable( {
        "aProcessing": true,
        "aServerSide": true,
        "scrollY": 350,
        "scrollX": true,
        "deferRender": true,
        "ajax": "Scripts/server-response-im.php",
        "aoColumns": [
                {"data": "1", "sClass": "align_center"},
                {"data": "2", "sClass": "align_center"},
                {"data": getCodeNameSpecsSize, "sClass": "align_center"},
                {"data": "7", "sClass": "align_center"},
                {"data": "8", "sClass": "align_center"},
                {"data": "9", "sClass": "align_center"},
                {"data": "10", "sClass": "align_center",
                 "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) {
                    var $currencyCell = $(nTd);
                    var commaValue = $currencyCell.text().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
                    $currencyCell.text(commaValue);
                }
                },
                {"data": getTotalPrice, "sClass": "align_center",
                 "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) {
                    var $currencyCell = $(nTd);
                    var commaValue = $currencyCell.text().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
                    $currencyCell.text(commaValue);
                }
                },
                {"data": "11", "sClass": "align_center"},
                { "mData": null , "sClass": "align_center",
                "mRender" : function ( data, type, full ) {
                    return '<a href="redirect_preview_po.php?c='+data[2]+'" target=_blank>Preview</a>';}
                }
            ],
        "aaSorting": [[0,'desc']],
        dom: 'Bfrtip',
        lengthMenu: [
            [ 10, 25, 50, -1 ],
            [ '10 rows', '25 rows', '50 rows', 'Show all' ]
        ],
        buttons: [
            'pageLength',
            'print',
            'copyHtml5',
            'excelHtml5',
            'csvHtml5',
            'pdfHtml5',
            'colvis'
        ],
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

我使 getCodeNameSpecsSize 功能正常工作,但 getTotalPrice 功能无效。该表显示 NaN 值而不是qty * unit_price。

QTY = data[7];
Unit Price = data[9];

提前致谢。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

您可能想要检查数据类型[7]和数据[9]。如果它们是字符串类型,则乘法可能不起作用。

尝试使用parseInt(data [7])* parseInt(data [9])并查看是否有效。

答案 1 :(得分:1)

您正在尝试将函数传递给data:,但这不是它所期望的。该选项应指向数据中的字段。如果您希望该列显示该函数计算的数据,那就是render:的用途。

作为一个注释,您将1.10之前的表示法与1.10之后的表示法混合在一起;例如,当您应该使用mRender时,您正在使用render。所有hungarian notation都可以而且应该被新的符号替换。

无论上述注意事项如何,以下是如何使用列来呈现将data[7]data[8]传递给getTotalPrice函数的结果的数据。

{"data": null, "sClass": "align_center",
    "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) {
    var $currencyCell = $(nTd);
    var commaValue = $currencyCell.text().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
    $currencyCell.text(commaValue);
    },
    "render": function ( data, type, row, meta ) {
        return getTotalPrice(row);
    }
}

请注意,data:已替换为null。这是因为数据不在原始数据源中,而是从其他字段计算。 另一个主要变化是添加了render选项。

我不确定fnCreatedCell应该做什么,但如果这不起作用,请尝试对其进行评论,因为它可能会或可能不会干扰render。< / p>

答案 2 :(得分:0)

我的代码现在正在运行。我的错。在我重新检查了所有内容后,我得到了unit_price = data [10];不是数据[9];因此,结果不可用或NaN。谢谢你的支持,伙计们。