dataTables暂时禁用排序

时间:2016-07-08 09:38:24

标签: javascript jquery html datatables

我有一个可填写数据的可排序dataTable,您可以在单击时编辑数据。

点击前看起来像这样:

<input type='text' value='...' size=3 disabled>

点击时:

$('#table1 tbody').on( 'click', 'tr', function () 
{
    var olddata = "";
    olddata = table.cell( this, 3 ).data();
    table.cell( this, 3 ).data( "<input type='text' value='" + olddata + "' size=3 style='background-color:white'>" );
});

然而,当你点击一行时,它会改变位置,因为它现在还包含额外的html代码,如果这是活动的订购列,它最终会在底部或顶部。

我排序使用:

var columnSet = 
[
    ...
    {title: "Mycolumn", width:"1%", "type": "string"},
    ...
];

所以我的问题是,是否可以在单击一行时暂时禁用整个表中的排序,然后在完成编辑后再次启用,或者根据值属性进行排序?

1 个答案:

答案 0 :(得分:0)

好的,我设法用一个小技巧来解决这个问题

var columnSet = 
[
    ...
    {title: "Mycolumn", width:"1%", "type": "html"},
    ...
];

使用type:html删除“&lt;”之间的所有内容和“&gt;”然而,这让我的dataTables试图对空单元格进行排序,因为

<input value="...">

只有“&lt;”之间的内容和“&gt;”

我用以下方法解决了这个问题:

olddata = $(table.cell( row, 5 ).data()).attr("value");
table.cell( row, 5 ).data( "<input type='text' value='" + olddata + "' size=25 style='background-color:white'><p hidden>" + olddata + "</p>" );

p元素将不会被看到但数据表可以看到并使用它进行排序,因此行不会改变位置!这个解决方案甚至比禁用排序更好,因为您现在仍然可以对表进行排序