“oCol 未定义”使用数据表和 jQuery Ui 对话框

Posted

技术标签:

【中文标题】“oCol 未定义”使用数据表和 jQuery Ui 对话框【英文标题】:"oCol is Undefined" Using Datatables and jQuery Ui Dialog 【发布时间】:2011-09-18 07:48:16 【问题描述】:

我有一个表格,用于搜索注册表。此表单在jQuery Dialog 中显示信息,并且在对话框内部,我使用的是Datatables(是的,在对话框内部我有一个完整的表格)。我正在使用 php 动态生成 TR 和 TD,然后 PHP 将字符串粘贴到 html 中。 但是,当显示对话框时,我收到此错误:

oCol 未定义: oCol.fnSetData(oData, val);

我在 Firefox 和 Chrome 中尝试过,但结果是一样的。我也在http://www.datatables.net 中搜索过,我丢弃了一个“格式错误的表”。我不知道我做错了什么。

你能帮我解决这个问题吗?

这是我的 JS 块:

        <script type="text/javascript" language="javascript" src="lib/jQuery/jquery-1.6.1.js"></script>
        <script type="text/javascript" language="javascript" src="lib/jQuery Ui/js/jquery-ui-1.8.13.custom.min.js"></script>
        <script type="text/javascript" language="javascript" src="lib/Datatables/DataTables-1.8.0/media/js/jquery.dataTables.js"></script>
        <script type="text/javascript">
            $(document).ready(function ()
                $("#results").dialog(
                    title: "Results",
                    width: 900, 
                    height: 500,
                    open: function(event, ui)
                        $("#tRes").dataTable(
                            "bPaginate": true,
                            "bLengthChange": true,
                            "bFilter": true,
                            "bSort": true,
                            "bInfo": true,
                            "bAutoWidth": true
                        );
                    
                );
            );
        </script>

这是我的表格(带有 PHP 代码段):

<div id="results">
    <table id="tRes">
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>State</th>
                <th>Address</th>
            </tr>
        </thead>
        <tbody>
            <?php 
                echo $rows;
            ?>
        </tbody>
    </table>
</div>

提前致谢。

【问题讨论】:

【参考方案1】:

这可能是因为您的表格结构不正确。确保有thead 和tbody。我有这个错误,一旦我添加了 thead 和 tbody 它就消失了。我的设置与其他回复中的设置完全不同 - 我不确定为什么那个有效,因为它不适合我。

table
  thead
    tr
      th`s
  tbody
    tr`s
      td`s

【讨论】:

这个。当我在正文中添加一列但未能为其添加 th 时,我遇到了这个问题。【参考方案2】:

您是否尝试过像这样设置您的列:

                    $("#tRes").dataTable(
                        "bPaginate": true,
                        "bLengthChange": true,
                        "bFilter": true,
                        "bSort": true,
                        "bInfo": true,
                        "bAutoWidth": true,
                     "aoColumns": [
                                        null,
                                        null //put as many null values as your columns

                    ]
                    );

如果这仍然不起作用,您能否也发布生成的 html? 您可以考虑的另一件事是在 document.ready 上初始化表格,不仅是在您打开对话框时,而且我认为这不是问题所在。

【讨论】:

是的,你是对的。这解决了问题。谢谢(2 个月后) 只有在标题多于连续单元格的情况下,这才是解决方案,反之亦然,正确的解决方案是 thugsb。虽然它可以解决手头的问题,但它正在弥补裂缝。 如果我有 6 列,即&lt;th&gt;,但只有 4/6 是内容,即另外两个是按钮,我的 JSON 响应,即服务器端,返回一个 JSON 对象只有 4 个键值对。如何告诉数据表按原样显示其他 2 个 &lt;td&gt; 按钮,即不影响/重写/隐藏它们?【参考方案3】:

jQuery 数据表插件要求 &lt;tbody&gt; 标记中的元素数量 与表格的&lt;thead&gt; 标记中&lt;th&gt; 元素的数量相匹配 .

【讨论】:

【参考方案4】:

$("#tRes").dataTable( “bPaginate”:是的, “bLengthChange”:真, “bFilter”:真, “bSort”:是的, “bInfo”:是的, “bAutoWidth”:真, );

从您的页面中删除此代码并检查文本框设置值的语法,然后它将正常工作。

【讨论】:

以上是关于“oCol 未定义”使用数据表和 jQuery Ui 对话框的主要内容,如果未能解决你的问题,请参考以下文章

如何打印 jquery 对象/数组

使用jquery提交FormData数据

使用jQuery在没有target=u blank的新窗口中打开外部链接

全局评估jQuery

jQuery/ASMX:在 C# 中反序列化 JSON 时出错

jquery 如何遍历json