开发者问题收集

jQuery 如何修复无法设置未定义的属性‘_DT_CellIndex’?

2018-01-19
89487

我是 Jquery 新手,我希望一旦用户添加新行并提供重要信息,一旦他单击“Ajouter”按钮,它就会添加到数据库中,然后自动重新加载表格。 一旦我运行它,我发现数据已成功添加到数据库中,但是“tablebqup”不再重新加载,并且我发现此错误:

Uncaught TypeError: Cannot set property '_DT_CellIndex' of undefined

这是添加新元素的函数:

    $("#newbq").click(function () {
    var indexadd= $('table#tablebqup tr:last').index() + 1;
    //Now add this row to the table:
    var row='<tr><td></td><td  contenteditable="true"></td><td  contenteditable="true"></td><td  contenteditable="true"></td><td  contenteditable="true"></td><td  contenteditable="true"></td><td colspan="2"> <button id="add'+indexadd+'" class="btn btn-info addbc" name="button">Ajouter</button> </td></tr>';
    $('#tablebqup').append(row);
    $(".addbc").click(function () {
      var nombc=($(this).parent().parent().find('td:eq(1)').html());
      var abrv= ($(this).parent().parent().find('td:eq(2)').html());
      var sigsoc=($(this).parent().parent().find('td:eq(3)').html());
      var telf=($(this).parent().parent().find('td:eq(4)').html());
      var fx=($(this).parent().parent().find('td:eq(5)').html());
    //  if (nombc=="" || abrv=="" || sigsoc=="" || (telf=="" && fx==""))
    if (nombc=="")
      {
        alert("Rempier toutes les informations de la banque d'abord")
      }
      else {
        $choix=confirm("voulez vous vraiment ajouter la banque");
         if ($choix)
         {
           console.log(nombc);
           $.post(basUrl+'views/component/updtbq.php',
             {
               action:'add_bq',
               nomb:nombc,
               abrvb:abrv,
               sigsocial:sigsoc,
               tel:telf,
               fax:fx,
             }, function(data) {
               alert(data);
             $('#tablebqup').DataTable().ajax.reload();//My problem is here
            });
          }
       }
      });
  });

在我第一次运行它时,它显示了类似以下内容:

“Uncaught TypeError: $(…).DataTable is not a function”

为了解决这个问题,我添加了适当的链接和脚本:

这样做错误已更改为:

Uncaught TypeError: Cannot set property '_DT_CellIndex' of undefined

令我惊讶的是,我使用了上述类似的逻辑,我的意思是使用相同的逻辑:

 $('#tablebqup').DataTable().ajax.reload(); 

并且一旦我单击另一个按钮,只需以这种方式修改数据库中的信息:

 $(".modif").click(function () {
     $choix=confirm("voulez vous vraiment sauvegarder les modifications");
     if ($choix)
     {
       var id=($(this).parent().parent().find('td:eq(0)').html());// the value in the 1st column.
       var nombc=($(this).parent().parent().find('td:eq(1)').html());
       var abrv= ($(this).parent().parent().find('td:eq(2)').html());
       var sigsoc=($(this).parent().parent().find('td:eq(3)').html());
       var telf=($(this).parent().parent().find('td:eq(4)').html());
       var fx=($(this).parent().parent().find('td:eq(5)').html());
       console.log(id);
       $.post(basUrl+'views/component/updtbq.php',
         {
           action:'update_bq',
           idbc:id,
           nomb:nombc,
           abrvb:abrv,
           sigsocial:sigsoc,
           tel:telf,
           fax:fx,
         }, function(data) {
         $('#tablebqup').DataTable().ajax.reload();
        });
      }

无需添加任何这两个链接!!!

这是错误的详细信息:

Uncaught TypeError: Cannot set property '_DT_CellIndex' of undefined
    at Ga (datatables.min.js:36)
    at M (datatables.min.js:28)
    at HTMLTableRowElement.<anonymous> (datatables.min.js:28)
    at jquery-3.2.1.min.js:2
    at Function.map (jquery-3.2.1.min.js:2)
    at r.fn.init.map (jquery-3.2.1.min.js:2)
    at ma (datatables.min.js:28)
    at e (datatables.min.js:104)
    at HTMLTableElement.<anonymous> (datatables.min.js:104)
    at Function.each (jquery-3.2.1.min.js:2)

这是我的 php 文件:

function add_bq()
{
  if((isset($_POST['nomb']))
  &&(isset($_POST['abrvb']))
  &&(isset($_POST['sigsocial']))
  &&(isset($_POST['tel']))
  &&(isset($_POST['fax']))
  ){
    $nomb=trim($_POST['nomb']);
    $abrv=trim($_POST['abrvb']);
    $sigc=trim($_POST['sigsocial']);
    $tel=trim($_POST['tel']);
    $fax=trim($_POST['fax']);
    //Update les banques
    MainController::addBanque($nomb,$abrv,$sigc,$tel,$fax);
   include 'C:/wamp/www/Mini_Prj/views/component/tbbanqueupd.php';
  }

这是包含的:“tbbanqueupd.php”:

<?php
require_once("C:/wamp/www/Mini_Prj/controllers/mainController.php");
$bnqs=MainController::getBanque();
echo'
<div>
<h3>  Mise a jours des banques</h3>
<div >

  <div class="table-responsive">
  <table id="tablebqup" class="tableau table table-fixed table-bordered table-dark table-hover ">
  <thead>
    <tr>
      <th>Id Banque</th>
      <th>Nom de la banque</th>
      <th>Abrev </th>
      <th>Siège Sociale</th>
      <th>Tel</th>
      <th>Fax</th>
      <th>Modifier</th>
      <th>Supprimer</th>
    </tr>
  </thead>
  <tbody>
  <form method="post">
  ';
  $i=0;
foreach ($bnqs as $bnq) {

echo
" <tr>
<td>".$bnq['idbc']."</td>
<td  contenteditable='true'>".$bnq['nomb']."</td>
<td  contenteditable='true'>".$bnq['abrvb']."</td>
<td  contenteditable='true'>".$bnq['sigsocial']."</td>
<td  contenteditable='true'>".$bnq['tel']."</td>
<td  contenteditable='true'>".$bnq['fax']."</td>
<td> <button id='modif$i' class='btn btn-info modif' name='button'>Modifier</button> </td>
<td> <button id='supp$i' class='btn btn-info supp' name='button' onclick='suprimer(this.id)'>Supprimer</button> </td>
</tr>";
$i++;
}
echo'
</form>
  </tbody>
</table>
</div>
<button type="button" class="btn btn-info" name="button" id="newbq" >Nouvelle banque</button>
</div>
</div>';

我认为问题可能是因为我允许用户不填写所有信息,但我希望用户只输入重要的字段。 我该如何解决这个问题?有人可以帮忙吗?

3个回答

td 的数量与 th 的数量不匹配时,或者当我使用 colspan 时,会出现此错误...

根据您的 css,可能很难看到。我会在测试时为表格添加边框...

hexYeah
2018-01-19

一个简单的错误,表格标题中有一列“没有标题,但表格本身并不存在该列。我看不出它缺失了(因为没有标题也没有边框)。

查看 datatable.js 中出现错误的行很有帮助 - 这意味着 tr 有问题,因此更仔细地查看了我的表格而不是我的整体代码

Paras Sharma
2021-10-28

我在 thead-th 部分和 tbody-td 部分中的列数正确。任何 thtd 元素上均未添加 colspan,但我遇到了同样的问题。我做了一些研究,发现我禁用了数据表中不存在的列号的排序功能。

实际上,当我尝试禁用第 6 个数字列的排序功能时,我的数据表中只有 4 列。这是个意外。我忘了更改它。代码如下:

$(document).ready(function()
{
    $('#datatable').DataTable( {
        "aoColumnDefs": [
            { 'bSortable': false, 'aTargets': [0,1,6] }
        ],
        responsive: true,
    });
});

然后我更改了“aTargets”值,根据我的情况可以将其设置为 3,正确的代码如下:

$(document).ready(function()
{
    $('#datatable').DataTable( {
        "aoColumnDefs": [
            { 'bSortable': false, 'aTargets': [0,1,3] }
        ],
        responsive: true,
    });
});

它对我有用。很高兴分享并帮助他人 :)

Kamlesh
2022-10-20