2016-08-19 5 views
1

У меня есть этот код ниже.Умножение в таблицах данных

$(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]; 

Заранее благодарен. Любая помощь будет высоко ценится.

ответ

1

Возможно, вы захотите проверить тип данных [7] и данные [9]. Если они являются строковыми типами, то умножение может не сработать.

Попробуйте использовать parseInt (данные [7]) * parseInt (данные [9]) и посмотрите, работает ли это.

+0

QTY и цена единицы товара уже BIGINT в моей таблице, также я пробовал ваш код return parseInt (данные [7]) * parseInt (данные [9]); это не работает. Есть идеи? Благодарю. –

+1

Трудно отлаживать без каких-либо вводных данных. Попробуйте добавить точку останова в функции или войти в консоль, чтобы узнать, что происходит. Также временно закомментируйте функцию fnCreatedCell и попытайтесь изолировать проблему. –

+0

Теперь мой код работает. Виноват. После того, как я проверил все, я получаю этот unit_price = data [10]; а не данные [9]; Таким образом, результат не будет доступен или NaN. Спасибо за поддержку. –

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: был заменен нулем. Это связано с тем, что данные не находятся в исходном источнике, а вычисляются из других полей. Другим основным изменением является добавление опции render.

Я не совсем уверен, что должно делать fnCreatedCell, но если это не сработает, попробуйте прокомментировать это, так как это может или не может помешать render.

+0

Теперь мой код работает. Виноват. После того, как я проверил все, я получаю этот unit_price = data [10]; а не данные [9]; Таким образом, результат не будет доступен или NaN. Спасибо за поддержку. –

+0

Кстати, функция fncreatedCell состоит в том, чтобы заставить строки становиться валютным форматом (добавляя комы к строкам), я подделываю, где я получаю этот LOL. –

0

Теперь мой код работает. Виноват. После того, как я проверил все, я получаю этот unit_price = data [10]; а не данные [9]; Таким образом, результат не будет доступен или NaN. Спасибо за поддержку, ребята.

Смежные вопросы