ajax处理后,数据表fnAdjustColumnSizing不起作用

时间:2012-01-02 14:10:28

标签: javascript jquery datatables

我目前正在使用带有ajax数据的数据表,我想调整列宽。 所以我发现这个函数fnAdjustColumnSizing并且我尝试使用它:

oTable = $('.datatable').dataTable( {
    "sScrollX": "100%",
    "sScrollXInner": "200%",
    "bScrollCollapse": true,
    "bDestroy" : true,
    "sAjaxSource": "xhr.php",
    "bFilter": false,
    "bSort": false,
    "bLengthChange": false,
    "bPaginate": false,
    "bInfo": false,
    "fnServerData": function ( sSource, aoData, fnCallback ) {
        $.ajax( {
            "dataType": 'json', 
            "type": "POST", 
            "url": "webservice.php", 
            "data": 'id=' + quotation_id + '&customer_id=' + id + '&action=true', 
            "success": function(msg){
                fnCallback(msg);
            }
        });
    },
    "fnInitComplete": function() {
        this.fnAdjustColumnSizing();
    }
});

该功能没有任何效果,但如果我在其他事件中使用它,如下所示:

$('#target').click(function() {
    oTable.fnAdjustColumnSizing();
});

它运作良好,任何想法?

3 个答案:

答案 0 :(得分:1)

你试过吗

"fnInitComplete": function() {
    oTable.fnAdjustColumnSizing();
}

因为我不确定this是否指向表格对象

答案 1 :(得分:0)

我通过在ajax查询的“success”回调中使用函数找到了一个解决方案:

$.ajax( {
    "dataType": 'json', 
"type": "POST", 
"url": "webservice.php", 
"data": 'edit_quotation=true&action=true' + data, 
"success": function(msg){
    fnCallback(msg);
    $('.overlay').hide();
    adjustTable();
}
});

function adjustTable(){
    oTable.fnAdjustColumnSizing();
}

它就像魅力一样,但我不知道为什么。有人可以解释一下吗?

答案 2 :(得分:0)

我在Internet Explorer 8中遇到了类似的问题(不是在Firefox中):我的表头没有对齐表格。

该表在“模态”对话框(twitter bootstrap)内初始化,显示后。 最后,为了使它能够与Internet Explorer 8一起使用,在创建表之后我正在进行此调用:

var t = setTimeout(function () { myTableObject.fnAdjustColumnSizing(false);}, 300);

这会刷新表而不会进行另一次不必要的Ajax调用,但它会在执行之前等待300毫秒,以便“在重新调整之前让Internet Explorer执行其操作”。如果你设置较低的值,即10毫秒),这不起作用。

我希望它有所帮助,

罗杰