Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.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 添加更多列时,tablesorter不工作_Javascript_Jquery_Tablesorter - Fatal编程技术网

Javascript 添加更多列时,tablesorter不工作

Javascript 添加更多列时,tablesorter不工作,javascript,jquery,tablesorter,Javascript,Jquery,Tablesorter,我有一个表格,我在第二列排序。默认情况下,我有8列 行可能会有所不同,这取决于我添加了多少内容 当我有标准的8列时,排序是有效的,但当我标记一个复选框并保存时,表示将在我的表中动态生成更多信息,那么排序就不再有效了 代码: 我使用firebug查看问题所在,我的“s”参数(上面的检查)始终是一个空字符串(“”) 逐步: 我标记一个复选框,然后按一个保存按钮。完成后,我按下另一个按钮,触发弹出窗口并获取我的表格,现在表格有10列,但第二列将不再像以前那样执行排序 我错过什么了吗?我已经阅读了tab

我有一个表格,我在第二列排序。默认情况下,我有8列 行可能会有所不同,这取决于我添加了多少内容

当我有标准的8列时,排序是有效的,但当我标记一个复选框并保存时,表示将在我的表中动态生成更多信息,那么排序就不再有效了

代码:

我使用firebug查看问题所在,我的“s”参数(上面的检查)始终是一个空字符串(“”)

逐步: 我标记一个复选框,然后按一个保存按钮。完成后,我按下另一个按钮,触发弹出窗口并获取我的表格,现在表格有10列,但第二列将不再像以前那样执行排序

我错过什么了吗?我已经阅读了tablesorter插件,没有发现任何人有类似的问题


谢谢

我看到你所描述的有两个问题;希望你用的是我的

1) 要获取复选框的值,需要在单元格中搜索输入并检查更新。请注意,此解析器将与原始表排序器一起工作,但它不会正确更新(使用
updateCell
方法)。注意:此代码来自,可以在中看到

2) 问题中唯一不清楚的是,是否在弹出窗口中动态构建表,或者是否修改了带有复选框的表,然后将其复制到弹出窗口

请注意,上述方法仅更新表中复选框的状态。它不会将任何动态添加的列包含到已初始化的表中。在这种情况下,需要使用,但需要在更新表内容后触发

$table.trigger('updateAll', [ resort ]);
如果您可以共享在“保存”复选框选项和初始化弹出窗口之间运行的代码,这将有助于使问题更加清楚


更新:要解析输入,需要获取输入元素的值。parser format函数中的
s
仅包含表单元格中的文本。当表格单元格中只有一个输入时,不会返回任何文本,因为输入元素不包含文本,它有一个值。因此,不要使用我在上面共享的“checkbox”解析器,而是使用这个“input”解析器;但是如前所述,此解析器将与原始版本的tablesorter(v2.0.5)一起工作,但如果使用“updateCell”方法,则无法正常工作

$.tablesorter.addParser({
    id: "inputs",
    is: function(){
        return false;
    },
    format: function(s, table, cell) {
        return $(cell).find('input').val() || s;
    },
    type: "text"
});

此解析器还需要
$(窗口)中的代码。加载上面显示的(…)
,以便在用户更改时更新已解析的输入进行排序。

插入动态生成的内容后,只需触发更新。看起来您的表是用“
attendanceList
”类标识的,因此动态更新后的命令是:

$(".attendanceList").trigger("update");

是否在每次表更新后初始化tablesorter?是的,我在每次更新后调用tablesorter。当标记复选框时,表将动态生成。复选框不是表的一部分。您标记复选框并保存已标记的复选框,然后按另一个按钮打开一个带有动态生成表的弹出窗口。每次单击“打开”按钮时,表格都会启动。这里让我感到困惑的是,每当我按下“打开”按钮时,表就会启动,并生成我希望它生成的确切数量的列和行,但第二列上的排序就停止了工作。在第二个注释中,当我有10列时,我发送给解析器(“s”)的参数总是空的。我非常感谢你在这里的回答,也非常感谢你花了这么多时间来写它,但在这种情况下,它将重点放在复选框上,而不需要。这在有8列的情况下工作得非常好,当我需要10列时,解析器和表确实会得到更新,因为每次我按下“打开”键时,它都会从开始启动按钮,但是解析器中的参数总是空的,并且分类器不能对空值进行排序。我想弄明白的是,为什么解析器会得到一个空字符串?图片:但价值观是:只是为了让其他人在未来不会感到困惑。我的尝试(上面的注释)不起作用的原因是字符串没有父字符串,因为它是一个简单的值。我需要这个元素,并从我发送到解析器的cell参数中获得它,这要感谢@MottieMy!哦,哎呀,我忘了在上面共享的代码中定义
resort
。我忘了从
解析器输入select.js
文件中复制它。
$.tablesorter.addParser({
    id: "inputs",
    is: function(){
        return false;
    },
    format: function(s, table, cell) {
        return $(cell).find('input').val() || s;
    },
    type: "text"
});
$(".attendanceList").trigger("update");