使用循环创建多个表的 Tabledit

Posted

技术标签:

【中文标题】使用循环创建多个表的 Tabledit【英文标题】:Tabledit for multiple tables create with loop 【发布时间】:2021-04-07 01:46:16 【问题描述】:

我正在使用循环创建带有 dataTable 和 Tabledit 的 X 表,主要示例来自 https://www.webslesson.info/2020/05/make-editable-datatable-using-jquery-tabledit-plugin-with-php-ajax.html

情况是每个循环,Tabledit 正在添加来自最新列 + 按钮(图像)的信息

img with situation

并且对于每个循环,数据数量较少(循环大小) 如何解决这个问题?

这是代码:(其他phps与链接相同) 另外,如何为每个表格添加行按钮?

main.js:

$(document).ready(function()
html ="";
    for(x = 0; x < 5; x++) 

        html += '<table id="" class="tabla table table-bordered table-striped">';
        html += '<thead>';
        html += ' <tr>';
        html += '  <th>ID</th>';
        html += ' <th>First Name</th>';
        html += ' <th>Last Name</th>';
        html += '  <th>Gender</th>';
        html += ' </tr>';
        html += '</thead>';
        html += '<tbody></tbody>';
        html += '</table>';
    

    $('#tab').append(html);

    //TRAE LOS DATOS DE LA BD
    var dataTable = $('.tabla').DataTable(
     "processing" : true,
     "serverSide" : true,
     "order" : [],
     "ajax" : 
      url:"fetch.php",
      type:"POST"
     

    );

// i did this, but doest work:
      $addRowButton.on('click', function() 
        console.log('clicked');
        $dataTable.row.add([
            counter +'.1',
            counter +'.2',
            counter +'.3',
            counter +'.4',
            counter +'.5'
        ] ).draw( false );
 
        counter++;
      );

   // AGREGA Y EJECUTA BOTONES DE EDITAR, BORRAR
    $('.tabla').on('draw.dt', function()
     $('.tabla').Tabledit(
      url:'action.php',
      dataType:'json',
      columns:
       identifier : [0, 'id'],
       editable:[[1, 'first_name'], [2, 'last_name'], [3, 'gender', '"1":"Male","2":"Female"']]
      ,
      restoreButton:false,
      onSuccess:function(data, textStatus, jqXHR)
      
       if(data.action == 'delete')
       
        $('#' + data.id).remove();
        $('.tabla').DataTable().ajax.reload();
       
      
     );
    );    
   ); 

index.php:

<div id="tab" class="table-responsive">
</div>

【问题讨论】:

【参考方案1】:

您可以使用each 遍历表并分别初始化每个表。

类似:

$(document).ready(function() 
  html = "";
  for (x = 0; x < 5; x++) 
    html += '<table id="" class="tabla table table-bordered table-striped">';
    html += '<thead>';
    html += ' <tr>';
    html += '  <th>ID</th>';
    html += ' <th>First Name</th>';
    html += ' <th>Last Name</th>';
    html += '  <th>Gender</th>';
    html += ' </tr>';
    html += '</thead>';
    html += '<tbody></tbody>';
    html += '</table>';
    html += '<button>Add row</button>';
  

  $('#tab').append(html);

  //TRAE LOS DATOS DE LA BD
  $('.tabla').each(function() 
    var $table = $(this);
    var $addRowButton = $table.next();
    var dataTable = $table.DataTable(
      "processing": true,
      "serverSide": true,
      "order": [],
      "ajax": 
        url: "fetch.php",
        type: "POST"
      
    );

    $addRowButton.on('click', function() 
      $table.row.add([/*add_new_data_here*/]);
    );

    // AGREGA Y EJECUTA BOTONES DE EDITAR, BORRAR
    $table.on('draw.dt', function() 
      $table.Tabledit(
        url: 'action.php',
        dataType: 'json',
        columns: 
          identifier: [0, 'id'],
          editable: [
            [1, 'first_name'],
            [2, 'last_name'],
            [3, 'gender', '"1":"Male","2":"Female"']
          ]
        ,
        restoreButton: false,
        onSuccess: function(data, textStatus, jqXHR) 
          if (data.action == 'delete') 
            $('#' + data.id).remove();
            $('.tabla').DataTable().ajax.reload();
          
        
      );
    );
  );
);

【讨论】:

谢谢 Mosh Feu,解决了,我要做一些测试,但我想我解决了!!!! 你如何为每个表添加一个添加行按钮? @moshfeu 当然 :) 你的意思是datatables.net/examples/api/add_row.html? 是的,但是我使用的是类而不是 ID,那么当我按下 de 按钮时,我该如何识别我正在调用的表?并将该行添加到该表中 您可以将按钮附加到表格旁边,目标为$table.next(),然后像示例中一样绑定click 事件。我已经更新了答案。

以上是关于使用循环创建多个表的 Tabledit的主要内容,如果未能解决你的问题,请参考以下文章

使用带有大表的循环的 python 性能问题

对于多个表的循环postgres

如何在 Tabledit jquery 中发送多个标识符

使用选择而不是表的游标循环(Oracle)

使用 VBA 循环遍历工作表中的每个打印页面

如何运行 VBA 循环来格式化每个工作表并创建摘要选项卡