gpt4 book ai didi

jquery - 在 DataTables (jQuery) 中对 3 个表进行排序

转载 作者:行者123 更新时间:2023-12-01 01:44:05 27 4
gpt4 key购买 nike

我正在使用 jQuery 的 DataTables ( http://datatables.net/ ) 插件。我有 3 个表,它们具有相同的列,但数据不同,我想同步它们的排序。 IE。然后我订购一张表,我希望其他表按同一列排序。

JavaScript 代码如下:

$(document).ready(function () {
var absTable = $('#absTable').DataTable();
var difTable = $('#difTable').DataTable();
var relTable = $('#relTable').DataTable();

$('#absTable').on( 'order.dt', function () {
var absOrder = absTable.order();
difTable.order( [ absOrder[0][0], absOrder[0][1] ] ).draw();
relTable.order( [ absOrder[0][0], absOrder[0][1] ] ).draw();
} );
$('#difTable').on( 'order.dt', function () {
var difOrder = difTable.order();
absTable.order( [ difOrder[0][0], difOrder[0][1] ] ).draw();
relTable.order( [ difOrder[0][0], difOrder[0][1] ] ).draw();
} );
$('#relTable').on( 'order.dt', function () {
var relOrder = relTable.order();
absTable.order( [ relOrder[0][0], relOrder[0][1] ] ).draw();
difTable.order( [ relOrder[0][0], relOrder[0][1] ] ).draw();
} );
});

我工作得很好,除了当我调用draw()方法时没有发生任何其他事情,似乎js代码在第一个draw()之后停止执行。

有人可以帮我吗?

最佳答案

看来您的代码会导致无限循环,因为 order()方法导致 order.dt 事件发送到其他表,并且其他表处理程序尝试再次对表进行排序。

您需要设置一个标志来指示其他表的排序是否正在进行中,并且它们应该忽略 order.dt 事件。

请参阅下面的示例以获取更正的代码和演示。

$(document).ready(function() {
var absTable = $('#example1').DataTable({ dom: 't' });
var difTable = $('#example2').DataTable({ dom: 't' });
var relTable = $('#example3').DataTable({ dom: 't' });

var order_in_progress = false;
$('#example1').on( 'order.dt', function () {
if(!order_in_progress){
order_in_progress = true;

var absOrder = absTable.order();
difTable.order( [ absOrder[0][0], absOrder[0][1] ] ).draw();
relTable.order( [ absOrder[0][0], absOrder[0][1] ] ).draw();

order_in_progress = false;
}
} );

$('#example2').on( 'order.dt', function () {
if(!order_in_progress){
order_in_progress = true;

var difOrder = difTable.order();
absTable.order( [ difOrder[0][0], difOrder[0][1] ] ).draw();
relTable.order( [ difOrder[0][0], difOrder[0][1] ] ).draw();

order_in_progress = false;
}
} );

$('#example3').on( 'order.dt', function () {
if(!order_in_progress){
order_in_progress = true;

var relOrder = relTable.order();
absTable.order( [ relOrder[0][0], relOrder[0][1] ] ).draw();
difTable.order( [ relOrder[0][0], relOrder[0][1] ] ).draw();

order_in_progress = false;
}
} );
});
<!DOCTYPE html>
<html>

<head>
<meta charset="ISO-8859-1">

<link href="//cdn.datatables.net/1.10.7/css/jquery.dataTables.min.css" rel="stylesheet" />
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="//cdn.datatables.net/1.10.7/js/jquery.dataTables.min.js"></script>
</head>
<body>
<table id="example1" class="display" cellspacing="0" width="100%">
<thead>
<tr><th>Name</th><th>Size</th></tr>
</thead>
<tbody>
<tr><td>Small.mp3</td><td>200</td></tr>
<tr><td>Normal.mp3</td><td>300</td></tr>
<tr><td>Large.mp3</td><td>400</td></tr>
<tr><td>Smallest.mp3</td><td>100</td></tr>
</tbody>
</table>

<table id="example2" class="display" cellspacing="0" width="100%">
<thead>
<tr><th>Name</th><th>Size</th></tr>
</thead>
<tbody>
<tr><td>Small.mp3</td><td>200</td></tr>
<tr><td>Normal.mp3</td><td>300</td></tr>
<tr><td>Large.mp3</td><td>400</td></tr>
<tr><td>Smallest.mp3</td><td>100</td></tr>
</tbody>
</table>

<table id="example3" class="display" cellspacing="0" width="100%">
<thead>
<tr><th>Name</th><th>Size</th></tr>
</thead>
<tbody>
<tr><td>Small.mp3</td><td>200</td></tr>
<tr><td>Normal.mp3</td><td>300</td></tr>
<tr><td>Large.mp3</td><td>400</td></tr>
<tr><td>Smallest.mp3</td><td>100</td></tr>
</tbody>
</table>

</body>
</html>

关于jquery - 在 DataTables (jQuery) 中对 3 个表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30817332/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com