javascript - 使用 jQuery 在 DataTables 表中创建动态链接

标签 javascript jquery html ajax datatables

我正在尝试使用 DataTables 创建一个 JSON 交付的表,并让该表在单击表中的某些链接时执行“操作”。链接并不总是存在,因此需要动态生成。 我刚刚开始使用 jQuery,并且很难弄清楚我所说的“附加”到正确元素的回调是什么。

这是一个示例 HTML 页面,带有动态生成的“向上”链接(在普通的旧 JS 中相当幼稚)。这个想法是,点击该链接将例如生成一个警报,显示您单击的行以及上面的行。最终目标是能够使用链接/按钮向上或向下移动行。

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
        <head>
                <title>Show a re-orderable list</title>
        <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.10/css/jquery.dataTables.min.css" />
                <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
        </head>
    <script type="text/javascript" language="javascript" src="//code.jquery.com/jquery-1.11.3.min.js"> </script>
    <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.10/js/jquery.dataTables.min.js"> </script>
    <script type="text/javascript" class="init">
        $(document).ready(function() {
            var table = $('#example').DataTable( {
                "ajax": "foo_data.txt",
                       "columnDefs": [
                        {
                            "render": function ( data, type, row ) {
                                var extra_text = "";
                                if( data === "Queued" ) {
                                    extra_text = ' <a href="#" class="up_queue">Up</a> Down ';
                                }
                                return data +' ('+ row[3]+')' + extra_text;
                            },
                            "targets": 1
                        },
                        { "visible": false,  "targets": [ 3 ] }
                        ]
            } );
            $(".up_queue").on('click', function() {
                var mydata = table.row( this ).data();
                var uprow  = table.row( this ).index() - 1;
                var updata = table.row( uprow) .data();
                alert( 'You clicked on '+mydata[0]+ ' ' +updata[0] +' row' );
                });
        } );
    </script>
<body>

<div>
<table id="example" class="display" cellspacing="0" width="100%">
        <thead>
            <tr>
                <th>Job ID</th>
                <th>Status</th>
                <th>Name</th>
                <th>Elapsed Time</th>
                <th>Options</th>
            </tr>
        </thead>
    </table>
</div>

</body>
</html>

本质上,问题是“向上”链接没有执行任何操作...我想知道单击了哪一行,以及被点击者正上方的行的索引。有什么想法吗?

这是可以通过 AJAX 提供的关联数据 foo_data.txt:

{
"data":
[["101","Finished","Static","3 days",""],
 ["102","Queued","Moveable1","--",""],
 ["103","Queued","Moveable2","--",""],
 ["104","Queued","Moveable3","--",""],
 ["105","Queued","Moveable4","--",""],
 ["106","Queued","Moveable5","--",""],
 ["107","Queued","Moveable6","--",""]]}

最佳答案

原因是链接不起作用,因为它在您附加事件处理程序时不存在。您需要改用委托(delegate)事件处理程序。

$('#example').on('click', ".up_queue", function() {
   var mydata = table.row( this ).data();
   var uprow  = table.row( this ).index() - 1;
   var updata = table.row( uprow) .data();
   alert( 'You clicked on '+mydata[0]+ ' ' +updata[0] +' row' );
});

参见jQuery DataTables – Why click event handler does not work了解更多信息。

另一方面,请考虑使用 RowReorder扩展提供了更好的行重新排序功能。

关于javascript - 使用 jQuery 在 DataTables 表中创建动态链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34855504/

相关文章:

javascript - 如何在javascript中拒绝用户输入的无效字符串

javascript - 将图像附加到 <td> 标签时如何使用动画缓慢移动图像

jquery - 如何将 jQuery UI 内容背景更改为白色?

javascript - PHP - 如果用户退出网页则取消链接文件?

javascript - angularJs 形式未正确将对象添加到数组中。 2 路绑定(bind)不起作用

javascript - 使用 Node/Express 正确处理错误

javascript - 如何重写 WebSocket send() 方法

jquery - 滚动到网页顶部并向下滚动到网页

Javascript 类返回数组,像 jQuery 一样创建库

javascript - Canvas 工具提示出现在 Canvas 外?