jQuery表排序器排序不工作

jQuery表排序器排序不工作,jquery,ajax,jquery-plugins,Jquery,Ajax,Jquery Plugins,我使用jQuery tablesorter插件从csv文件动态生成一个表,这部分工作正常。但是,每当我试图通过单击表标题对表进行排序时,firebug都会在控制台中报告此问题: parsers is undefined return parsers[i].type;\n 起初,我认为这个问题是由于加载文档后表格没有准备好造成的,所以我通过在从csv文件呈现表格后手动调用tablesorter()修复了这个问题。但这并没有解决问题 此外,在桌子的最末端,桌子的末端画了一些乱码。我想这与上面的错误

我使用jQuery tablesorter插件从csv文件动态生成一个表,这部分工作正常。但是,每当我试图通过单击表标题对表进行排序时,firebug都会在控制台中报告此问题:

parsers is undefined
return parsers[i].type;\n
起初,我认为这个问题是由于加载文档后表格没有准备好造成的,所以我通过在从csv文件呈现表格后手动调用tablesorter()修复了这个问题。但这并没有解决问题

此外,在桌子的最末端,桌子的末端画了一些乱码。我想这与上面的错误有关

有关守则如下:

<html>

<head>  
    <link rel="stylesheet" href="blue/style.css" type="text/css" />

   <script type="text/javascript" src="jquery-1.3.2.min.js"></script> 
   <script type="text/javascript" src="jquery.tablesorter.js"></script>
   <script type="text/javascript" src="jquery.csv.js"></script>
   <script type="text/javascript" id="js">
   function sortThis() {
         $("#myTable").tablesorter({
            // sortList:[[0,0],[2,1]]
         });
   }; 
    </script> 
    <title>huh!?</title>

</head>

<body>

<table id="myTable" class="tablesorter" cellspacing="1" cellpadding="0" border="0"> 

<thead> 
<tr>    
<th>name</th> 
<th>type</th> 
<th>Date</th> 
</tr>
</thead>

<tbody>

    <script type="text/javascript">

        $.get('myfile.csv', function(data) {
            myfile = jQuery.csv()(data)
            for (var x = 0; x < myfile.length; x++) {
                str = "<tr>";
                for (var y = 0; y < myfile[x].length; y++) {
                    str += "<td>" + myfile[x][y] + "</td>";
                }
                str += "</tr>";
                $('#myTable').append(str);
            }
        });

        sortThis();
    </script>

</tbody>
</table>
</body>
</html>

函数sorttthis(){
$(“#myTable”).tablesorter({
//排序列表:[[0,0],[2,1]]
});
}; 
呵呵!?
名称
类型
日期
$.get('myfile.csv',函数(数据){
myfile=jQuery.csv()(数据)
对于(var x=0;x

提前感谢您的帮助。

我无法对javascript错误发表评论。但是问题的显示部分是您将字符串附加到表中,而不是tbody

更改此项:

$('#myTable').append(str);
为此:

$('#myTable tbody').append(str);

我认为你的思路是对的,在你尝试排序时,表格还没有完全写出来。虽然javascript只会在前一个函数完成后启动下一个函数,但浏览器是线程化的,因此不能保证任何DOM更新都已完成,因为导致它们的函数已完成

Jquery提供了一种方法,在执行函数之前等待DOM元素被加载,这就是ready(function(){…})方法

我将尝试以下替换方法,在其中调用sortThis()函数:


$(document).ready( function() {
    sortThis();
});
这将等待DOM完成加载,然后再尝试执行sorttthis()

在写这篇文章时,我意识到您正在使用$.get()更新表,因此我确信DOM没有加载,但是上面的解决方案可能无法满足您的需要,因为它可能在表完全加载之前执行。$.get()函数在“后台”检索数据,因此您的sortThis()函数将在get请求触发时立即执行,而不是在get请求完成时执行。您有两种可能的解决方案,一种是为get请求提供async=false,这样,在get请求完成并执行回调函数之前,下一个函数将不会执行


    $.get('myfile.csv', async=false, function(data) {
            myfile = jQuery.csv()(data)
            for (var x = 0; x ";
                for (var y = 0; y " + myfile[x][y] + "";
                }
                str += "";
                $('#myTable').append(str);
            }
        });

        sortThis();
在我看来,更好的解决方案是将sorttthis()调用放在回调函数中。这将导致加载和处理页面所需的时间减少,因为在服务器通信过程中,脚本的其余部分可以继续进行。我将使用以下解决方案:


    $.get('myfile.csv', function(data) {
            myfile = jQuery.csv()(data)
            for (var x = 0; x ";
                for (var y = 0; y " + myfile[x][y] + "";
                }
                str += "";
                $('#myTable').append(str);
            }
            sortThis();
        });

希望这有帮助;)让我知道您得到了什么结果…

我遇到了类似的问题,但是由于表是空的(除了标题之外),所以抛出了错误。我想你也会因为同样的原因出错

我认为问题在于,tablesorter不知道表数据,因为在使用$.get()方法加载页面之后,您正在修改它。在调用sortThis()之前,使用此调用向tablesorter发出表数据更改的警报

这应该能解决你的问题

作为tablesorter调用的一部分,您还可以使用以下语法来避免此错误:

$('#myTable:has(tbody tr)').tablesorter({
 ...
});

我在a上找到了帮助。

嗯,你认为有人有机会试着猜一下它可能是什么吗?您需要提供呈现的标记,或者更好的是提供一个显示问题的url。针和干草堆在脑海中浮现!我使用了tablesorter插件,但没有看到这个问题。我想你应该发布相关的代码片段和表标记。你能给出问题的简要版本吗?@Russ Cam:我刚刚尝试了这个,但仍然有相同的显示错误。看起来问题出在jquery csv上。如果我手动设置一个数据数组,for循环将正确显示它们:“myfile=[['a'、'b'、'c']、['d'、'e'、'f']]”数据正在从csv文件正确解析,jquery.csv正在按预期工作。问题在于tablesorter插件,在尝试对列进行排序时,我还没有弄清楚它到底出了什么问题,我不相信它是这样的。我用一个简单的csv文件测试了它,该文件包含上面相同的数据,两行,一行包含a、b、c,另一行包含d、e、f。当我在第一个for循环之前加载csv并回显myfile.length时,它会告诉我5列,而不是预期的3列。如果我使用firebug DOM,我可以看到myfile数组中填充了我的所有数据。此外,如果我禁用tablesorter插件,所有数据都会正确解析并正确格式化到表中。对于空表,我也会遇到同样的问题,metcalfe的解决方案会解决它。对于空表,我也遇到了问题。我喜欢:has(tbody tr)解决方案。简单而优雅:)-\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu!非常感谢,这也解决了我的问题。它略有不同,但需要更新,因为数据是通过AJAX传入的。
$('#myTable:has(tbody tr)').tablesorter({
 ...
});