【问题标题】:jQuery dataTables - adding row does not workjQuery dataTables - 添加行不起作用
【发布时间】:2015-05-15 06:25:24
【问题描述】:

找到了很多解决方案,但没有一个对我有用。谁能告诉我这段代码有什么问题?

我的桌子是这样的

 <table id="allPermission" class=" table-striped" cellspacing="0" width="100%">
            <thead>
                <tr>
                    <th>Permission No</th>
                    <th>Permission</th>
                    <th>Command</th>
                </tr>
            </thead>
            <tbody>

            </tbody>
            <tfoot>
                <tr>
                    <th>Permission No</th>
                    <th>Permission</th>
                    <th>Command</th>
                </tr>
            </tfoot>
        </table>

我的java脚本代码在这里

var tbl = $('#allPermission').DataTable({
  "processing": true,
  "retrieve": true,
  "serverSide": true,
  "lengthMenu": [
    [5, 10, 25, -1],
    [5, 10, 25, "All"]
  ],
  "ajax": $.fn.dataTable.pipeline({
    url: 'rest/showAllPermissions',
    pages: 2 // number of pages to cache
  }),
  "columns": [{
    "data": "permid"
  }, {
    "data": "permissionname"
  }, {
    "data": "DT_RowId",
    "sortable": false,
    "render": function(data, type, full) {
      var result = "";

      result = '<a class="btn btn-info btn-sm" href=/fieldforce/user/editAdmin/' + full.dt_RowId + ' style="width: 58px;"' + '>' + 'Edit' + '</a>' + '<a class="btn btn-danger btn-sm" href=/fieldforce/user/deleteAdmin/' + full.dt_RowId + ' style="margin-left: 15px;"' + '>' + 'Delete' + '</a>';
      return result;
    }
  }],
  "deferRender": true,
  "scrollY": "250px"
});

$('#addPerm').submit(function(e) {
  e.preventDefault();
  $('#loadingGif').css({
    "display": "block"
  });
  $('#formBody').css({
    "display": "none"
  });
  // do ajax submition
  $.ajax({
    url: "/fieldforce/administration/rest/addPermission",
    type: "POST",
    data: $(this).serialize(),
    success: function(data, status, xhr) {
      $('#loadingGif').css({
        "display": "none"
      });
      // $('#addPermission').modal('toggle');
      $('#messageBody').html("Success");
      tbl.row.add({
        "permid": '9',
        "permissionname": 'admin',
        "DT_RowId": '8'
      }).draw();
    },
    error: function(jqXHR, textStatus, errorThrown) {
      $('#messageBody').html("Server Error");
    }
  });
});

我正在使用 jquery 版本 jquery-1.11.1.min 和数据表版本是 //cdn.datatables.net/1.10.7/js/jquery.dataTables.min.js TIA

【问题讨论】:

  • 你遇到了什么错误?
  • 调试时没有错误显示。但行不加
  • @Amir 查看我编辑的答案

标签: javascript jquery datatables


【解决方案1】:

根据:https://datatables.net/examples/api/add_row.html 网站,您应该在 add 方法中传递数组

试试这个:

 var tbl = $('#allPermission').DataTable();
          tbl.row.add(['9','admin','8']).draw();

或者根据这个:https://datatables.net/reference/api/rows.add()

你可以试试这个:

var tbl = $('#allPermission').DataTable();
 tbl.rows.add([{
     "permid": '9',
     "permissionname": 'admin',
     "dt_RowId": '8'
 }]).draw();

【讨论】:

  • 感谢您的回复。我已经试过了。它会导致列不匹配错误。
  • @Amir,您能否显示您的 HTML 表格代码。 HTML表格有多少列?
  • 您可以添加对象和数组。请参阅文档 -> datatables.net/reference/api/row.add() 而不是示例。顺便说一句,您答案中的最后一个代码 sn-p 会导致错误并且不起作用,因为您基本上只是尝试将一个对象插入到第一列。
  • davidkonrad @ 那我该怎么办?
【解决方案2】:

看这个例子

$(function(){

  var tbl = $('#allPermission').DataTable();
  tbl.row.add(['9','admin','8']).draw();

});
<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>
<link href="//cdn.datatables.net/1.10.7/css/jquery.dataTables.min.css" rel="stylesheet"/>

<table id="allPermission">
  <thead>
            <tr>
                <th>permid</th>
                <th>permissionname</th>
                <th>dt_RowId</th>
            </tr>
        </thead>

</table>

【讨论】:

    【解决方案3】:

    你有两个问题:

    1. 您应该包含一个&lt;tbody&gt; 元素。即使在没有&lt;tbody&gt; 的情况下添加行也可以,但在使用带有格式错误标记的数据表时存在严重的错误风险。

    2. 将对象添加为新行时,您必须通过columns : [ { data : 'property' } ...] 选项指定哪些数据属性对应于哪些列。

    所以像这样初始化你的数据表:

    var tbl = $('#allPermission').DataTable({
        columns: [
            { data: "permid" },
            { data: "permissionname" },
            { data: "dt_RowId" }
        ]    
    });
    

    并且您的代码有效。演示 -> http://jsfiddle.net/eco6cgqe/

    【讨论】:

    • davidkonrad@ 感谢您提供宝贵的两个信息。我编辑了我的问题。能否请您查看我的最新代码并告诉我此代码有什么问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多