常见问题

DataTables 是一款功能全面的软件,其使用过程中势必会产生疑问。其中一些疑问已提出并得到解答,以下是其中最常见的问题。

寻求帮助

问:我有一个问题 - 如何寻求帮助?
答:在本站上获得 DataTables 帮助的最佳途径。手册参考资料示例、这些常见问题解答以及论坛中提供了大量的 DataTables 文档。如果您无法在网站上找到您问题的答案,请将其发布在论坛上。如果您要发布与现有表格有关的问题,请提供一个显示该问题的测试用例的链接,或者至少使用DataTables 调试器提供有关该表格的信息。

问:我需要尽快得到此问题的答案!
答:像往常一样在论坛上发布您的问题,然后使用支持页面购买 DataTables 的支持包。购买支持可确保您将收到有关您遇到问题的帮助,还有助于支持整个 DataTables 项目。

问:我最快可以在什么时候期待收到对论坛帖子的回复?
答:确保您能获得问题的答复的最佳途径是购买支持选项。发布测试用例还可以确保获得解决问题所需的所有信息。响应时间当然会有所不同,但通常会在一天之内收到回复,但有时可能需要更长时间。如果是这种情况,请不要见怪!

最常见的常见问题解答

问:我收到一条错误消息,说明一个 API 方法不可用
答:很可能您使用的是 jQuery 对象,而不是 DataTables API 实例。形式$().dataTable()将返回一个 jQuery 对象,而$().DataTable()返回一个 DataTables API 实例。有关更多信息,请参阅 API 文档

问:我的事件在第二页上不起作用
答:在受 DataTables 控制的表格中向单元格附加事件时,您需要小心操作方式。因为 DataTables 会从 DOM 中删除节点,所以使用静态事件侦听器应用的事件可能无法绑定到表格中的所有节点。为了解决此问题,只需使用 jQuery 委托事件侦听器选项,如本例所示。此外,您还可以使用我的Visual Event书签帮助调试事件问题。

问:我收到一个 JSON 解析错误
答:这是由于服务器返回了不正确的 JSON 数据。请参阅此技术说明,了解如何调试和解决此问题。

问:“请求 unknown 参数”错误
A. 当 DataTables 请求数据表中数据源中没有的属性时,您会收到此错误。这可能是因为指定了不正确的列数、缺少参数以及主体中的 colspan/rowspan。请参阅此技术说明,了解如何调试和解决此问题。

问:我收到 IE 中的 JavaScript 错误,但 Firefox、Chrome 等中没有。
A. 大多数情况下,这是由数组末尾的“浮动”逗号引起的。IE 将为此发出警告,其他浏览器会自动将其删除。

问:我使用 DOM/jQuery 向表中附加一行,但在重新绘制时将行删除。
A. 这里的问题是 DataTables 不了解您对 DOM 结构的操作 - 即它不知道您添加了一行,并且当它重新绘制时,它将删除未知的行。要从 DataTable 添加、编辑或删除信息,您必须使用DataTables API(特别是row.add()row().data()row().remove()方法添加、编辑和删除行。

问:DataTables 是否适用于平台X/服务器框架Y
A. DataTables 是一个 JavaScript 库,因此服务器端环境无关紧要。只要它可以构建有效的 HTML 或 JSON 数据表,就可以通过 Ajax 读取它将起作用。

问:如果我修改 HTML,为什么不更新表格?
A. 这与前一个问题类似。初始化 DataTable 时,表的填充高速优化为缓存 - 因此此后的 HTML 更改不会反映在 Datable 中。要更新表,请使用以下一种 API 方法:cell().data()cells().data()row().data()rows().data()。如果您无法避免直接更新 HTML,可以使用cell().invalidate()row().invalidate()(或它们的复数等效项)使该单元格或行的缓存无效,或者您可以使用destroy()销毁 DataTable 并重新初始化。

问:如何对日期和时间进行排序?
A. 日期和时间有多种不同的格式,从仅计算机可读的格式到特定于区域设置的格式。DataTables 内置支持具有自动区域设置格式的 ISO6801 格式日期和时间,并通过与 Moment.js 和 Luxon 集成支持格式化的日期和时间。使 DataTables 了解您的日期/时间信息的正确方法取决于数据的加载和显示方式

问:如何按列标题第三次点击时保持表格已排序?
答:默认情况下,DataTables 将按升序排列、降序排列和不排序循环,根据需要重复。这通过 columns.orderSequence 选项控制。您可以在特定列中选择性地禁用此选项,但要完全禁用页面上所有表格的此选项,则可以设置默认值,如 columns.orderSequence 文档中所示。

常规初始化

问:DataTables 运行缓慢。如何提高速度?
答:有多种方法可以提高 DataTables 的速度。通常首先要做的就是启用分页 (paging)(如果已禁用),因为它可以减少要显示的数据量。还值得注意的是,对于包含大量列的表格,滚动 (scrollXscrollY)会极大地影响绘制性能,因为会涉及计算。除此之外,通常对性能影响最大的方法是用于加载数据的方法。

  • 客户端处理 - DOM 源数据:约 5000 行。速度选项:orderClasses
  • 客户端处理 - Ajax 源数据 (ajax):约 50000 行。速度选项:deferRender
  • 服务器端处理 (serverSide):百万行。

请注意,IE6/7 等早期浏览器的行数可能会低于以上给出的行数。此外,如果您使用的是 Firefox 和 Firebug,请关闭 Firebug,因为这会对性能产生负面影响。

问:我的表格无法运作!
答:您是否定义了 DataTables 所需的 theadtbody手册 - 安装)?您的 HTML 是否有效(W3C 验证器)?您是否看到任何 JavaScript 错误?

问:我的样式未显示/我的表格未应用样式。
答:您是否在页面上包含 DataTables 的演示 CSS(并且路径正确!)?

问:如何移动表格控件?
答:您可以使用 dom 初始化参数移动 DataTables 置于表格周围的元素。

问:我可以在 Ajax 加载的 JSON 中定义我的列吗?
答:这当前不是 DataTables 的原生特性(尽管将来很可能会添加)。相反,您需要使用 $.ajax 加载 JSON 数据,然后使用 columns 选项分配列定义数组。

问:使用按钮时如何显示页面长度 select
A. 这个问题会在你使用旧版 dom 将按钮插入到页面中时出现,但是 dom 字符串中 l 字符已被移除(在许多按钮示例中是这样)。你可以使用 pageLength 按钮插入 一个页面长度按钮列表,或者将 l 选项重新添加到 dom 字符串中。

当你使用 topStart 位置来替代默认 pageLength 时,此问题还可能出现在 layout 选项中。为该功能使用另一个布局位置,pageLength,或者一个数组,以便在 topStart 位置有多个项目。

服务器端处理

问:它不起作用…(停留在“处理”中)
答:这通常是因为从服务器返回的 JSON 数据不正确。请参阅 此技术说明,了解如何调试并解决此问题。

问:它仍然不起作用…
答:导致服务器端处理不起作用的下一个最常见原因是 draw 变量没有按请求设置返回。DataTables 使用 draw 来保持抽取计数,所以这是一个重要的参数。请参见 服务器端使用

问:未启用分页,或者信息文本显示错误的数据集计数
答:这很可能是因为对 recordsFiltered 的使用不当。recordsFiltered 是数据集中过滤后的记录总数,而不仅仅是数据数组长度(DataTables 能够自己完成此操作!)。因此,如果你没有过滤,那么 recordsFiltered 应该与 recordsTotal 完全相同。请参见 服务器端使用

问:我的事件未被应用
答:发生这种情况的原因为 DataTables 会为每个抽取创建所需的显示节点(TR、TD 等),因此旧事件会丢失。你可以使用委托的事件(较佳选择),如在此示例中,或者 drawCallback 在每次抽取时重新添加事件。你还可以使用 可视化事件 书签工具帮助调试事件问题。

问:在使用 serverSide按钮 时,我如何导出整个表格。
A. 按钮是客户端进程,因此只能导出客户端上可用的数据。如果启用服务器端处理,客户端上不会保存完整数据集,因此只能导出可见数据。你可以:1. 使用服务器端进程创建下载的文件(建议使用——下载插件按钮可能提供一些帮助)或 2. 禁用服务器端处理。

搜索面板

问:使用按钮时搜索面板未配置
A. 使用按钮配置搜索面板时,搜索面板的配置需要放在按钮的 config 属性中,而非 DataTables 配置中。此示例演示如何执行此操作。

问:未显示面板
A. 发生这种情况可能是因为表格中的数据过于唯一。搜索面板使用 searchPanes.threshold 函数计算是否为某列显示面板。若要强制隐藏或显示面板,最好使用 columns.searchPanes.show 配置选项。

问:级联面板不起作用/级联面板中断
A. searchPanes.cascadePanes 是搜索面板中最复杂的部分。不幸的是,这会带来一些目前无法支持的边缘情况。如果你产生了这个问题,则很可能是你执行了一下列一项或多项不受支持的操作。

  • searchPanes.cascadePanescolumns.searchPanes.preSelect - 不支持,因为级联按预期表现时,需要按正确的顺序进行选择。目前无法通过 preSelect 指示此操作。
  • searchPanes.cascadePanesserverSide stateSave。虽然即使启用所有这些,搜索面板和级联仍将运行,但用户在页面上重新加载时看到选项的可能性和预期大不相同。同样,搜索面板需要按正确的顺序进行选择才能执行此操作,而发送到服务器的初始请求仅返回筛选选项,没有办法确定应该按什么顺序进行选择。
  • searchPanes.cascadePanescolumns.searchPanes.combiner。当一起使用它们时,必须确保表格中的数据适合你进行的选择。cascade 是针对默认的 or 逻辑而开发的,使用 and 逻辑大多数情况下可以奏效,但可能会出现意外结果。
  • 当通过 ajax 加载 SearchPanes 选项,但使用客户端处理,searchPanes.cascadePanessearchPanes.viewTotal均不受支持。这是因为用户最初提供的数据很可能很快变得不准确。这反过来又会导致意外的行为。

许可

问:DataTables 太棒了!多少钱?
答:DataTables 是免费的开源软件,您可以下载和用于任何您希望的目的,在任何您希望的任意多网站上。您可免费使用!DataTables 已根据 MIT 达成授权,您必须遵守该授权(为此,基本上保留软件中的版权声明)。

问:它真的免费,哪怕是商业网站?
答:是的!我非常自豪 DataTables 取得的成就以及帮助它达到今天地位的梦幻般的社区,我很高兴将其作为开源软件提供。显然,如果您从 DataTables 中受益,那么任何回报都非常受欢迎,无论是作为 DataTables 的插件(将您的代码发布在 论坛 中)、购买支持者套餐 还是发表一篇博客文章称您喜欢使用 DataTables。

问:我们不能使用 MIT 授权的软件。我们该怎么做?
答:在极少数情况下,您无法在可用许可下使用 DataTables,请 联系我们,以讨论其他许可安排。

开发常见问题

问:这是一款很棒的软件 - 我如何才能贡献?

  • 在您的博客上撰写有关 DataTables 的内容,并传播这一消息!
  • 为 DataTables 创建 插件,可在该网站上展示。
  • 在论坛中回答支持问题。
  • 为发现的任何缺陷提供补丁
  • 测试缺陷!

问:我已经创建了一个插件 - 如何与其他人分享?
答:请 直接将其发送给我,或将其发布在论坛中。

问:我认为我发现了一个缺陷 - 如何报告?
答:请在 论坛 中发布您的缺陷,以及一个完整的测试用例,显示如何在用户界面中重新生成此问题。