2016-01-11 2 views
0
var oTable = $('#table').dataTable({ 
    "bJQueryUI": true, 
    "aaData": jsonList, 
    "bPaginate": true, 
    "aoColumns": [ 
     { 
      "mDataProp": null, 
      "sClass": "control center", 
      "sDefaultContent": '<img src="http://i.imgur.com/SD7Dz.png">' 
     }, 
     { "mDataProp": "ente" }, 
     { "mDataProp": "cup" }, 
     { "mDataProp": "decreto" }, 
     { "mDataProp": "data" }, 
     { "mDataProp": "importoImpegno" }, //this is a currency 
     { "mDataProp": "finanziato" }, //this is a currency 
     { "mDataProp": "importoPagato" }, //this is a currency 
     { "mDataProp": "importoInPagamento" } //this is a currency 
    ], 
    "aoColumnDefs": [ 
    { "sClass": "currency", "aTargets": [ 5, 6, 7, 8 ]} 
    ], 
    "oLanguage": { 
     "sInfo": "_TOTAL_ entries" 
    }, 
    "aaSorting": [[1, 'asc']] 
}); 

Как вы можете видеть, я добавляю класс .currency только в колонку, где находится валюта. Мне нужно отформатировать эти валюты (например, с 3235 до 3,235,00), и у меня уже есть функция для этого.Формат валют при создании данных данных

function currencyFormatIT(num) { 

    if(num != null && num != "") { 
     num = parseFloat(num); 
     num = num 
     .toFixed(2) 
     .replace(".", ",") 
     .replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1."); 
    } 
    else { 
     num = ""; 
    } 

    return num; 
} 

Я пытался использовать этот метод так:

$("table.myTable > tbody td.currency").each(function(){ 
    $(this).html(currencyFormatIT($(this).html())); 
    $(this).css("text-align", "right"); 
}); 

Но это работает только со строкой, которая появляется в первой странице из DataTable:

First page

Со второй страницы не далее:

Second page

Если добавить этот код:

$(document).on("click", "td.currency", function(){ 
    alert($(this).html()); 
}); 

работает для всех тд всей страницы !!

1) Почему? 2) Если я хочу вызвать currencyFormatIT() функции, как функции обратного вызова (возможно, в коде, где я создаю DataTable .dataTable({.., как я мог сделать?

ответ

0

Вы можете использовать функцию fnDrawCallback.

var oTable = $('#table').dataTable({ 

    "fnDrawCallback": function (oSettings) { 
     // Format Currency here 
    } 

} 

Вы можете проверить documentation для получения дополнительной информации о возможных функциях обратного вызова.

+0

Хорошо, но что мне передать в функцию currencyFormatIT()? Как я могу сказать ему: «Вызовите валютуFormatIT() для каждого td с валютой класса»? – Dave

+0

Works . Но currencyFormatIT(), теперь, вызывается каждый раз, когда я изменить страницу или сортировать столбцы. И это неправильно. Есть функция обратного вызова, которая вызывается только один раз? – Dave

+0

@ DavideFruci это не то, что вы хотите? При изменении страницы необходимо форматировать валюту для новых данных на этой странице. Но если вы хотите просто вызвать его один раз, вы можете использовать функцию fnInitCallback. –

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