jQuery DataTables无法读取未定义的属性“ mData”,但表是有效标记

如何解决jQuery DataTables无法读取未定义的属性“ mData”,但表是有效标记

我一直在努力追踪这一问题,但没有任何乐趣。据我所知,我的标记是有效的,关于SO的大多数帖子都不是这样。

   <div class="container">
      <br />
      <div style="width:90%; margin:0 auto;">
        <table id="example" class="table table-striped table-bordered dt-responsive nowrap" width="100%" cellspacing="0">
          <thead>
            <tr>
              <th>StudentId</th>
              <th>Group</th>
              <th>Student</th>
                <th>4</th>
                <th>1</th>
                <th>7</th>
            </tr>
          </thead>
          <tbody>
              <tr>
                <td>4</td>
                <td>testgroup1</td>
                <td>Test Name2</td>
                  <td><input type="text" id="row-4-1a" name="row-4-1a" value="0"></td>
                  <td><input type="text" id="row-4-1b" name="row-4-1b" value="0"></td>
                  <td><input type="text" id="row-4-2" name="row-4-2" value="0"></td>
              </tr>
          </tbody>
        </table>
      </div>
      <button id="mytestbutton" type="submit">Submit form</button>
    </div>

我有一个C#后端,可以使用Razor生成很多内容,但是我已经使用浏览器的源输出复制了相同的行为。我正在使用的JavaScript如下所示,其中我将一些数据从后端设置为可以使用的js对象,然后在准备就绪的文档上初始化DataTable。

var modelJson = JSON.parse('{"AssessmentId":1,"Name":"test1","Groups":[{"GroupId":1,"Name":"testgroup1","Students":[{"StudentId":4,"Name":"Test Name2","IsActive":true}],"StudentIds":[4],"GroupIds":[1],"Questions":[{"QuestionId":0,"QuestionNumber":"1a","TopicDescription":"Topic goes here","AvailableMarks":4,"AssessmentId":0},{"QuestionId":0,"QuestionNumber":"1b","AvailableMarks":1,"QuestionNumber":"2","AvailableMarks":7,"AssessmentId":0}],"GradeBoundaries":{"A":80,"B":70,"C":0,"A*":90},"MarksAttained":[{"StudentId":4,"MarksAttained":{"1a":0,"1b":0,"2":0}}],"StudentIdsInAssessment":[4]}');
var columns = JSON.parse('[{"QuestionId":0,"AssessmentId":0}]');

function InitialiseDataTable(e,t) {
  var a = [];
  e.forEach(function(e) {
    a.push({
      data: e.QuestionNumber,name: e.QuestionNumber,autoWidth: !0
    })
  }),$("#example").DataTable({
    processing: !0,serverSide: !1,filter: !1,orderMulti: !1,data: {
      test: 100
    },columnDefs: [{
      targets: [0],visible: !1,searchable: !1
    }],columns: a
  })
}
$("#mytestbutton").click(function() {
  var e = $("#example").$("input,select").serialize();
  return alert("The following data would have been submitted to the server: \n\n" + e.substr(0,120) + "..."),!1
});

$(document).ready(() => {
  InitialiseDataTable(columns,1);
});

如果您想查看操作中的错误,这些代码都可以在https://jsfiddle.net/w4q57hdu/的jsfiddle上实时运行。

我一直无法确定为什么会出错,我只能假设初始化DataTable的方式中有问题,但是我看不到树木的影子。我从后端遍历我的column对象,并使用数组中每个对象的QuestionNumber属性来初始化DataTable。

补充一下,我遵循了https://datatables.net/examples/api/form.html上的示例代码。

解决方法

我可以看到一些潜在的问题:

1)columns选项

您构建的columns数据包含一个data选项,该选项已记录在here中。这样可以在包含给定名称的对象的数组中找到该列的数据。

例如,您推入数组的值之一是"data": "1a"

这意味着DataTables希望第一列从数据源中名为“ 1a”的值中获取其数据。

2)data选项

data选项(请参阅here)告诉DataTables在哪里查找表数据。例如,上面的columns.data选项使用它。该选项应该包含一个数组数组或一个对象数组。它还需要有效的JSON。就您而言,就是这样:data: { test: 100 }。这是无效的JSON。

这也不支持预期的columns.data名称(例如,如上所述的“ 1a”)。

3)HTML表

DataTables还使您可以直接在HTML表中定义数据-此处已完成。这也与使用data选项冲突。

快速测试

注释掉DataTable定义中的data:...columns:...选项。您将不再遇到任何错误。这只是确认以上注释的快速方法。

如果要在初始化DataTable对象之前将所有数据直接提供到HTML表中,那么可能就只需要这些(就像下面的示例一样)。

前进的方向

如果您想通过JSON将数据和列定义同时动态传递到DataTables(我假设您这样做),则可以执行以下操作:

a)通过删除其所有内部标签(<thead><tbody>)来剥离HTML表。通过使用empty HTML table definition,您可以避免当前的冲突。

b)通过使用a.push(或您要用于标题的任何字段)在title: e.QuestionNumber,部分中提供列标题。参见here

c)使用函数来构建相关列值所需的输入字段。您需要执行此操作,因为您不再在<html>定义中包含这些内容。

对于步骤(c),您可以看到示例here的示例,该示例如何使用render: function(...)在单元格中动态呈现不同类型的数据。

这应该给您一些指示。

这可能无法使您达到最终目标-但您应该能够克服当前的错误,并根据需要提出更具体/针对性的问题(当然,这里尚未提出和回答该问题) )。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res