не удается получить данные другого столбца из datatable с помощью функции onclick?

#javascript #jquery #datatable

#javascript #jquery #datatable

Вопрос:

у меня проблема в моем скрипте, идентификаторы и количество имеют значение, в то время как мой Identitytype равен null. я использую функцию onclick для получения всех выбранных значений на основе определенного столбца в datatable.

  $(function () {
        $('#PayableList').DataTable({
            "columnDefs": [{ type: 'date', 'targets': [6] }],
            "aaSorting": [[6, "desc"]],
            "ajax": "@Url.Action("getpayablelist", "payable")",
            "columns": [
                {
                    "render": function (data, type, full, meta) {
                        return "<input type='checkbox' class='checkbox' onclick='add("   full.Id   ", "   full.Amount   ", "   full.IdentityType   ", this.checked)'>"
                    }
                },
                { "data": "Name" },
                { "data": "ReferenceNo" },
                { "data": "IdentityType" },
                { "data": "Amount" },
                { "data": "CustomerPayable" },
                { "data": "CreatedDate" }
            ]
        });
    });

    var ids = [];
    var amounts = [];
    var identities = [];
    function add(id, amount, IdentityType, isChecked) {
        if (isChecked) {
            ids.push(id);
            amounts.push(amount);
            identities.push(IdentityType);
        }
        else {
            var i = ids.indexOf(id);
            ids.splice(i, 1);
        }
    }
  

введите описание изображения здесь

Комментарии:

1. Можете ли вы включить образцы данных, к которым вы привязываете таблицу данных?

2. @DipenShah пример данных приведен по ссылке выше.

Ответ №1:

Я не вижу фактического типа данных в изображении, но я предполагаю IdentityType , что это строка и, следовательно, вызывает проблему. Обновить метод визуализации до:

 "render": function (data, type, full, meta) {
    return "<input type='checkbox' class='checkbox' onclick='add("   full.Id   ", "   full.Amount   ", ""   full.IdentityType   "", this.checked)'>"
}
  

и это должно сработать. Вы не экранируете строку в методе, из-за чего возникает проблема.

Проверьте этот действительно плохой практический код, чтобы увидеть влияние на ваш текущий код после изменения:

 let full = {
  Amount: 100.25,
  Id: 1,
  IdentityType: "SOMERANDOMTEXT"
};
document.body.innerHTML = "<input type='checkbox' class='checkbox' onclick='add("   full.Id   ", "   full.Amount   ", ""   full.IdentityType   "", this.checked)' />";

function add(id, amount, identityType) {
  console.log(`${id}, ${amount}, ${identityType}`);
}