我正在使用版本为1.10的datatables。 我的要求是:
- 单击排序图标(向上和向下箭头)时,应在服务器端工作。
- 当单击th时,应在本地工作。这是因为用户错误地点击了thead,导致服务器负担过重。
目标:我希望同时保留以下两点:
- 本地排序[仅针对当前表格显示/页的数据](单击thead而非图标)
- 服务器端排序[仅通过单击图标]。
问题所在: DataTables 使用 CSS 背景图像进行排序。这使得很难检测到图标上的点击,因为根据我的了解,CSS 背景图像不能在单击时被捕获。
以下是我设想的解决方案,但还未取得进展:
JSFIDDLE: http://jsfiddle.net/bababalcksheep/mae29pau/10/
JS:
$(document).ready(function () {
//http://www.datatables.net/reference/api/
var url = "http://www.json-generator.com/api/json/get/cbEfqLwFaq?indent=2";
//
$('th').on("click.DT", function (event) {
event.stopImmediatePropagation();
});
var table = $('#example').DataTable({
"processing": true,
"serverSide": false,
"ajax": url
});
//
//$('th').off('click.DT');
// sort internally
table.column('2').order('asc');
});
更新1:
JSFIDDLE: http://jsfiddle.net/bababalcksheep/mae29pau/14/
我通过添加sortMask并将其绑定到单击事件来更进一步。sortMask是一个div,它被添加到每个列的<thead> -> <tr> -> <th>
中。
CSS:
.sortMask {
width:19px;
height:19px;
float:right;
display:inline-block;
z-index:0;
margin-right: -19px;
/*background:red;*/
}
JS:
$('th').on("click.DT", function (e) {
//stop Propagation if clciked outsidemask
//becasue we want to sort locally here
if (!$(e.target).hasClass('sortMask')) {
e.stopImmediatePropagation();
}
});