在现有数据表

时间:2015-12-29 18:09:58

标签: javascript jquery datatables

我有一个数据表,列出了一些“阶段”(涉及针对个别员工的工作就业程序)。

我已设法对此进行编码,因此表格可以显示子行。我希望每个子行显示另一个数据表,该数据表将列出所选阶段的相关任务。

到目前为止,我已设法添加并显示带有表头的子行。看这里: [儿童排] [1]

我的HTML如下:

<div class="table-responsive">
<table class="table table-hover " id="stage_datatable">
    <thead>
        <tr>
            <th>Select</th>
            <th><!-- Detail --></th>
            <th>ID</th>
            <th>Stage</th>
            <th>Title</th>
            <th>Desc</th>
            <th>Date/Time</th>
            <th>Location</th>
            <th>Rep Required</th>
            <th>Logged By</th>
            <th>Date Logged</th>
        </tr>
    </thead>                      
</table>           

我的舞台表的Jquery在这里:

function loadStageTable (action, id) {

$.ajax ( {
    url: './stages/stage_ajax.php',
    method: 'GET',
    data: {action: action, id:id}, // id could be taskID or caseID
    dataType: 'json',
    success: function (data) {
        console.log(data);
        console.log("success");
        iTableCounter = 0;

        var table = $('#stage_datatable').DataTable ( {
            "searching": false,
            "sort": false,
            data:data,
            select: {
                style: 'os'
            },
            responsive: true,
            columns: [
                { 'data': null },
                {
                    "data": null,
                    "className":      'details-control',
                    "orderable":      false,
                    "defaultContent": ''
                },
                { 'data': 'meeting_id' },
                { 'data': 'stage_desc' },
                { 'data': 'meeting_title' },
                { 'data': 'meeting_desc' },
                { 'data': 'meeting_date_time' },
                { 'data': 'meeting_location' },
                { 'data': 'rep_required' },
                { 'data': 'logged_by' },
                { 'data': 'start_date' }
            ],
            "columnDefs": [ {
                "targets": -11,
                "data": null,
                "defaultContent": "<button class='btn btn-xs btn-primary'>Select</button>"
            }, 
            {
                "targets": -3,
                "className": "dt-body-center",
                "render": function (data, type, full, meta){
                    var is_checked = data == true ? "checked" : "";
                    return '<input type="checkbox" class="checkbox" ' + is_checked + ' disabled />';
                   }
            }]
        }); 
        console.log("stage datatable processed");
        $('#stage_datatable tbody').on('click', 'td.details-control', function () {

            var tr = $(this).parents('tr');
            var row = table.row( tr );

            if ( row.child.isShown() ) { // Close this row if already open
                $('div.slider', row.child()).slideUp( function () {
                    row.child.hide();
                    tr.removeClass('shown');
                } );
            }else {
                // table id is required for child rows and will be unique
                iTableCounter = iTableCounter + 1
                row.child(getChildRow).show(); // call getChildRow function to obtain the child row html

                var caseID = localStorage.getItem('caseID');
                console.log(caseID);
                loadMyTaskTable('get case tasks', caseID); // this is the AJAX function invoked to retrieve tasks. THIS DOESN'T WORK
                tr.addClass('shown');
                $('div.slider', row.child()).slideDown("slow");
            }
        });
    },
    failure: function (data) {
        console.log ("failed");
    }
});

在上面我编写了一个触发子行插入的事件:

$('#stage_datatable tbody').on('click', 'td.details-control', function () {

            var tr = $(this).parents('tr');
            var row = table.row( tr );

            if ( row.child.isShown() ) { // Close this row if already open
                $('div.slider', row.child()).slideUp( function () {
                    row.child.hide();
                    tr.removeClass('shown');
                } );
            }else {
                // table id is required for child rows and will be unique
                iTableCounter = iTableCounter + 1
                row.child(getChildRow).show(); // call getChildRow function to obtain the child row html

                var caseID = localStorage.getItem('caseID');
                console.log(caseID);
                loadMyTaskTable('get case tasks', caseID); // this is the AJAX function invoked to retrieve tasks
                tr.addClass('shown');
                $('div.slider', row.child()).slideDown("slow");
            }
        });

getChildRow如下:

function getChildRow() {
var x = innerTaskTableTemplate(iTableCounter, taskTableTemplate());
return x;

}

taskTableTemplate参数如下:

function taskTableTemplate() {
return '<thead>'+
    '<tr>'+
        '<th>Select</th>'+
        '<th>ID</th>'+
        '<th>Task Title</th>'+
        '<th>Desc</th>'+
        '<th>Due Date/Time</th>'+
        '<th>Allocated To</th>'+
        '<th>Logged By</th>'+
        '<th>Date Logged</th>'+
    '</tr>'+
'</thead>'+
    '<tbody></tbody>';

}

innerTaskTableTemplate函数如下:

function innerTaskTableTemplate(tableID, html) {
var sOut = "<div class='slider'><table id='task_table_" + tableID + "'>";
sOut += html;
sOut += "</table></div>";
console.log(sOut);

return sOut;

}

如果我从我的** loadStageTable **函数中删除该行,则代码会成功添加子行并插入表格html。

loadMyTaskTable('get case tasks', caseID);

但是,如果我包含该行,则子行似乎消失了。如果我使用firebug检查DOM,我找不到我的子行(例如'task_table_1')。见[这里] [2]。

loadMyTaskTable函数如下:

function loadMyTaskTable (action, id) {

$.ajax ( {
    url: './tasks/task_ajax.php',
    method: 'GET',
    data: {action: action, id:id}, // id could be taskID or caseID
    dataType: 'json',
    success: function (data) {
        console.log(data);
        var taskTable = $('#task_table_1')

        $(taskTable).DataTable ( {
            data:data,
            select: {
                style: 'os'
            },
            responsive: true,
            columns: [
                { 'data': null },
                { 'data': 'task_id' },
                { 'data': 'task_title' },
                { 'data': 'task_desc' },
                { 'data': 'task_due_date' },
                { 'data': 'allocated_to' },
                { 'data': 'logged_by' },
                { 'data': 'start_date' }
            ],
            "columnDefs": [ {
                "targets": -8,
                "data": null,
                "defaultContent": "<button class='btn btn-xs btn-primary'>Select</button>"
            }]
        }); 
        console.log("task table successfully loaded");  
    },
    failure: function (data) {
        console.log ("failed");
    }
});

}

请你告诉我哪里出错了。我确信我的AJAX工作正常,因为我已经尝试将任务表html添加到主页面上并且以这种方式正确加载,但是当我在我的数据表中动态插入它作为子行时不会。

我已尝试查看类似的其他帖子(例如[点击此处] [3])但我认为该代码已被数据表新API取代。

非常感谢。

其他详情 我调试了脚本并找到了以下内容:

  1. 该脚本使用task_table_1 html

  2. 成功插入子行
  3. 子行一旦到达* console.log(“任务表成功加载”),就会从DOM中删除; *我的 loadMyTaskTable 函数中的行。

  4. 我仍然不确定我在这里做错了什么。

0 个答案:

没有答案