想在Datatables中尝试排序时触发自定义事件

6
当用户点击列标题进行排序时,我希望触发自己的事件。但是我不想进行排序。我已经做了一些研究,没有找到一个好的方法来实现这个。
我可以绑定在排序事件上执行自己的操作,但排序仍然会发生。我不想要这个。如果我禁用排序,则排序事件永远不会被触发,因此这也行不通。
我可以禁用排序,然后尝试捕获标题上的点击事件,但我希望有更好的方法来实现这一点。有人有任何想法吗?
1个回答

13
非常简单。您只需解除click.DT处理程序的绑定,并添加自己的处理程序即可。您无需禁用排序。
示例
<table id="example">
<thead>
   <th id="id">ID</th>
   <th id="username">Username</th>
</thead>
<tbody>
    <tr><td>1</td><td>A test</td></tr>
    <tr><td>2</td><td>B test</td></tr>
    </tbody>       
</table>

JavaScript

$(document).ready(function(){
    //init datatables
    var table = $('#example').dataTable();

    //unbind sort event, prevent sorting when header is clicked
    $('#example th').unbind('click.DT');

    //create your own click handler for the header
    $('#example th').click(function(e) {
        alert('Header '+$(this).attr('id')+' clicked');
        //here you can trigger a custom event
    });

    //if you afterwards want to restablish sorting triggered by a click event 
    //here header "username" from example above
    table.fnSortListener(document.getElementById('username'), 1);
});

注意:DataTables中没有专用的“sort”事件。Allan Jardine提到它可能会在未来的2版本中出现。http://datatables.net/forums/discussion/5141/capturing-sort-event-on-table-heading/p1


哦,你使用的是哪个版本的datatables?这里用的是1.9.xx版本。 - davidkonrad
多有趣啊,一定是版本特定的问题。对我来说,使用.unbind('...')非常好用。然而,使用fnSortListener(...并没有重新绑定到列上进行排序。 - id.ot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接