Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery+;TableSorter:表为空时出错_Javascript_Jquery_Exception_Tablesorter - Fatal编程技术网

Javascript jQuery+;TableSorter:表为空时出错

Javascript jQuery+;TableSorter:表为空时出错,javascript,jquery,exception,tablesorter,Javascript,Jquery,Exception,Tablesorter,jQuery的插件TableSorter似乎无法处理将其附加到空表的情况。有什么好办法吗 在我的应用程序中,用户可以过滤和搜索数据,最终他或她会给出一个不返回任何值的搜索条件。在这些情况下,最好是“分离”TableSorter,或者以某种方式修复它的代码,以便它能够处理空表 我目前使用的插件如下: $("#transactionsTable") .tablesorter({ widthFixed: true, widgets: ['zebra'] }) .tablesor

jQuery的插件TableSorter似乎无法处理将其附加到空表的情况。有什么好办法吗

在我的应用程序中,用户可以过滤和搜索数据,最终他或她会给出一个不返回任何值的搜索条件。在这些情况下,最好是“分离”TableSorter,或者以某种方式修复它的代码,以便它能够处理空表

我目前使用的插件如下:

    $("#transactionsTable")
    .tablesorter({ widthFixed: true, widgets: ['zebra'] })
    .tablesorterPager({ container: $("#pager"), positionFixed: false });
这很有效,直到桌子空了。然后我得到以下错误:

Line: 3
Error: '0.length' is null or not an object

有什么想法吗?是否可以更改脚本,使tablesorter仅在有行的情况下添加到表中?

我想您可以自己做

    if ($("#transactionsTable").find("tr").size() > 1)
    {
          //> 1 for the case your table got a headline row
          $("#transactionsTable")
          .tablesorter({ widthFixed: true, widgets: ['zebra'] })
          .tablesorterPager({ container: $("#pager"), positionFixed: false });
    }
如果您的桌子上有tbody标签,则更容易:

if ($("#transactionsTable").find("tbody").find("tr").size() > 0)

这种方法可能不是最专业的方法,但在这种情况下应该可以使用。

这个问题与以下事实有关:代码库的几个部分使用行[0]来确定1)总列数,2)每列使用的解析器类型(例如“文本”与“数字”)

在修复此错误之前,这里有一个简单的解决方法:

  • 在每个表中创建一个假行,其内容如下(“假”、123、123、123、“假”)。注意我的伪内容如何匹配列的“类型”,以避免混淆列类型检测器。赝品123
  • <tr class="fake_row"><td>fake</td><td>123</td></tr>
  • 添加CSS样式以使假行不呈现: tr.fake_row { display: none; } tr.fake_row{ 显示:无; }

  • 这似乎很有效,允许tablesorter初始化和运行时无错误,并且对呈现的输出没有影响。

    更通用的方法是覆盖tablesorter插件本身以检查空表(直到它们解决问题为止)。请参阅这篇关于重写jquery核心方法的文章:


    这已在最新的tablesorter()中修复。

    因为覆盖插件总是一个坏主意,这里有一种不同的方法:如果您只想确保您的数据表包含实际的数据行,jQuery选择器:has()也会完成这项工作

    $('table.tablesorter:has(tbody tr)').tablesorter({
        // your tablesorter config here
    });
    

    顺便说一句,我发现了一个处理空表的选项。链接证明了这一点。它的2015年和缺陷仍然存在。我使用了tbody方法,效果很好。事实上,我使用的是2.0.5b版,我认为这是最新最棒的版本,但它仍然是一个问题。
    $('table.tablesorter:has(tbody tr)').tablesorter({
        // your tablesorter config here
    });