奇怪的jQuery数据表初始化行为

奇怪的jQuery数据表初始化行为,jquery,datatables-1.10,Jquery,Datatables 1.10,我有以下代码。我想知道为什么它以一种方式工作,而不是另一种方式 <!doctype html> <html> <head> <meta charset="UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=edge"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <

我有以下代码。我想知道为什么它以一种方式工作,而不是另一种方式

<!doctype html>
<html>
<head>
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Chart</title>
<link href="./css/jquery.dataTables.min.css" rel="stylesheet"/>
<script src="./js/jquery-3.1.0.min.js"></script>
<script src="./js/jquery.dataTables.min.js"></script>
<script>
/*
// THIS BLOCK DOES NOT WORK
var tbldata;

$(document).ready
(
        function()
        {
                tbldata = $("#tbldata").DataTable();
        }
);
*/

// THIS SINGLE LINE WORKS
var tbldata = $("#tbldata").DataTable();
</script>
</head>
<body>
        <div>
                <table id="tbldata">
                        <thead></thead>
                        <tbody></tbody>
                </table>
        </div>
</body>
</html>

图表
/*
//这个街区不行
var-tbldata;
$(文件)。准备好了吗
(
函数()
{
tbldata=$(“#tbldata”).DataTable();
}
);
*/
//这一行行行得通
var tbldata=$(“#tbldata”).DataTable();
如果我取消注释我标记为不工作的块并注释掉工作的单行,它会给我以下错误

jQuery.Deferred exception: Cannot read property 'aDataSort' of undefined TypeError: Cannot read property 'aDataSort' of undefined
    at V (http://192.168.33.10:5000/static/js/jquery.dataTables.min.js:65:443)
    at va (http://192.168.33.10:5000/static/js/jquery.dataTables.min.js:70:61)
    at HTMLTableElement.<anonymous> (http://192.168.33.10:5000/static/js/jquery.dataTables.min.js:91:148)
    at Function.each (http://192.168.33.10:5000/static/js/jquery-3.1.0.min.js:2:2815)
    at r.each (http://192.168.33.10:5000/static/js/jquery-3.1.0.min.js:2:1003)
    at r.m [as dataTable] (http://192.168.33.10:5000/static/js/jquery.dataTables.min.js:82:388)
    at r.h.fn.DataTable (http://192.168.33.10:5000/static/js/jquery.dataTables.min.js:166:245)
    at HTMLDocument.<anonymous> (http://192.168.33.10:5000/static/test.html:30:45)
    at j (http://192.168.33.10:5000/static/js/jquery-3.1.0.min.js:2:29568)
    at k (http://192.168.33.10:5000/static/js/jquery-3.1.0.min.js:2:29882) undefined
jQuery.Deferred异常:无法读取未定义类型的属性“aDataSort”错误:无法读取未定义类型的属性“aDataSort”
在V(http://192.168.33.10:5000/static/js/jquery.dataTables.min.js:65:443)
在弗吉尼亚州(http://192.168.33.10:5000/static/js/jquery.dataTables.min.js:70:61)
在HTMLTableElement。(http://192.168.33.10:5000/static/js/jquery.dataTables.min.js:91:148)
在功能上,每个(http://192.168.33.10:5000/static/js/jquery-3.1.0.min.js:2:2815)
在r(http://192.168.33.10:5000/static/js/jquery-3.1.0.min.js:2:1003)
在r.m[作为数据表](http://192.168.33.10:5000/static/js/jquery.dataTables.min.js:82:388)
在r.h.fn.DataTable(http://192.168.33.10:5000/static/js/jquery.dataTables.min.js:166:245)
在HTMLDocument。(http://192.168.33.10:5000/static/test.html:30:45)
在j(http://192.168.33.10:5000/static/js/jquery-3.1.0.min.js:2:29568)
在k(http://192.168.33.10:5000/static/js/jquery-3.1.0.min.js:2:29882)未定义

在没有任何选项的情况下调用DataTables初始值设定项时,它需要一个填充的
thead
,以便尝试检测列及其属性

在thead中至少添加一个
元素,然后注释的代码就可以工作了

未注释的行实际上不起作用。在javascript运行时,页面上还不存在该元素!因此,选择器获取0个元素,并且初始值设定项没有真正运行,因此没有错误

或者(也是我最喜欢的初始化DTs的方法)。。。为初始值设定项提供列定义数组


在没有任何选项的情况下调用DataTables初始值设定项时,它需要一个填充的
thead
,以便尝试检测列及其属性

在thead中至少添加一个
元素,然后注释的代码就可以工作了

未注释的行实际上不起作用。在javascript运行时,页面上还不存在该元素!因此,选择器获取0个元素,并且初始值设定项没有真正运行,因此没有错误

或者(也是我最喜欢的初始化DTs的方法)。。。为初始值设定项提供列定义数组


据我所知,您评论的块必须工作,而单行不能工作。据我所知,如果这是另一种奇怪的方式,那么你所评论的块必须工作,而单行不能工作。如果这是另一种方式的话,那么我们应该早点面对这个问题。是的,您是对的,初始化没有任何列的表不应该工作…但是问题仍然是为什么单行可以工作!!我在回答的最后一段解释了这一点。它/没有/真的工作,只是没有抛出错误。JS在元素存在之前运行。选择器拾取零个元素,因此DataTable初始值设定项不会运行。因此,没有错误。@BLSully-true,+1这正是我要寻找的答案。现在,一切都适合自己的位置。谢谢!:)我们早些时候就面临过这个问题。是的,您是对的,初始化没有任何列的表不应该工作…但是问题仍然是为什么单行可以工作!!我在回答的最后一段解释了这一点。它/没有/真的工作,只是没有抛出错误。JS在元素存在之前运行。选择器拾取零个元素,因此DataTable初始值设定项不会运行。因此,没有错误。@BLSully-true,+1这正是我要寻找的答案。现在,一切都适合自己的位置。谢谢!:)
$('#mytable').DataTable({
  columns: [{ title: 'First Name', data: 'FirstName' }] //etc, etc...
})