【问题标题】:tab to next cell in tablesorter with editable and stickeyheaders widgets带有可编辑和stickeyheaders小部件的tablesorter中的下一个单元格
【发布时间】:2014-07-25 04:20:09
【问题描述】:

我正在尝试使动态加载的表使用 tablesorter 并同时启用 editablestickyHeaders 小部件。

我已经很接近工作了。不过有一件很奇怪的事情。如果我点击一个可编辑的单元格然后按 Tab 键,下一个单元格会被激活,但只有一瞬间然后失去焦点。

在 Chrome 中,光标会消失。

在 Safari 中,在第二个单元格失去焦点后,您可以看到光标跳到表格标题行的最右侧,它所在的位置一直闪烁,直到您单击其他位置。 这是 Firefox 中显示光标的图片

以下是 editable 小部件的精简版演示,可按预期工作: Editable working version

这里是 editable 小部件的精简版演示,还添加了 stickyheaders,它可以将标签分到下一个单元格功能:

Editable + Stickyheaders not working

唯一的区别是添加了Stickyheaders


编辑:

好的,问题似乎是从jquery.tablesorter.widgets.js的第885行开始的这段代码

searching: function(table, filter, skipFirst) {
        var wo = table.config.widgetOptions;
        clearTimeout(wo.searchTimer);
        if (typeof filter === 'undefined' || filter === true) {
            // delay filtering
            wo.searchTimer = setTimeout(function() {
                ts.filter.checkFilters(table, filter, skipFirst );
            }, wo.filter_liveSearch ? wo.filter_searchDelay : 10);
        } else {
            // skip delay
            ts.filter.checkFilters(table, filter, skipFirst);
        }
    },

如果我将其注释如下,则恢复选项卡功能:

    searching: function(table, filter, skipFirst) {
        /*var wo = table.config.widgetOptions;
        clearTimeout(wo.searchTimer);
        if (typeof filter === 'undefined' || filter === true) {
            // delay filtering
            wo.searchTimer = setTimeout(function() {
                ts.filter.checkFilters(table, filter, skipFirst );
            }, wo.filter_liveSearch ? wo.filter_searchDelay : 10);
        } else {
            // skip delay
            ts.filter.checkFilters(table, filter, skipFirst);
        }*/
    },

当您使用表顶部的输入搜索值时,上述代码块似乎隐藏了所有不匹配的内容。注释掉它会修复标签功能,但会破坏过滤功能。

有什么想法可以修改这段代码以使正常选项卡到下一个单元格再次工作而不会破坏过滤器?

【问题讨论】:

    标签: jquery tablesorter


    【解决方案1】:

    我不是 100% 确定这是问题所在,但正在加载原始 tablesorter 和最新版本的 tablesorter:

    <script type="text/javascript" src="jquery2.0.3_Plus.js?v2.3.0"></script>
    <script type="text/javascript" src="jquery-migrate-1.2.1.js?v2.3.0"></script>
    <script type="text/javascript" src="jquery-ui-1.10.3.custom.min.js?v2.3.0"></script>
    <script type="text/javascript" src="tableData.js?v2.3.0"></script>
    <script type="text/javascript" src="jquery.tablesorter.min.js"></script>
    <script type="text/javascript" src="loadTable.js"></script>
    <script src="jquery.tablesorter.js"></script>
    <script src="jquery.tablesorter.widgets.js"></script>
    <script src="widget-editable.js"></script>
    

    去掉原来的,把“loadTable.js”移到新版本下面:

    <script type="text/javascript" src="jquery2.0.3_Plus.js?v2.3.0"></script>
    <script type="text/javascript" src="jquery-migrate-1.2.1.js?v2.3.0"></script>
    <script type="text/javascript" src="jquery-ui-1.10.3.custom.min.js?v2.3.0"></script>
    <script type="text/javascript" src="tableData.js?v2.3.0"></script>
    
    <script src="jquery.tablesorter.js"></script>
    <script type="text/javascript" src="loadTable.js"></script>
    <script src="jquery.tablesorter.widgets.js"></script>
    <script src="widget-editable.js"></script>
    

    另外,我不确定为什么光标会这样,请将 editable_columns 选项设置为不包含不存在的列 - 我将在下一个版本中修复小部件以正确忽略非- 存在的列。

    editable_columns : [0,1,2,3,4,5] // or use '0-5'
    

    【讨论】:

    • 感谢您抽出宝贵时间了解这两个方面!我已经进行了这些更改(并将新文件上传到示例中)。但它仍在发生。你之前有没有一起使用过editable和stickyHeaders?我的第一个倾向是认为它与使用stickyHeaders 小部件创建的标题行的克隆有关,但这只是一个猜测。我会用一个更简单的例子来试试这个,看看我是否有同样的问题。
    • 是的。我制作了editable 示例的两份副本,并删除了所有文档内容。在第一个上,我将其保留为 editable,并且标签按预期工作。在第二个中,我添加了stickyheaders,它破坏了标签功能。他们似乎不想在一起玩得很好。我用新的简化示例更新了我的问题。我会深入研究stickyheaders,看看我是否能找到冲突。
    • 我发现searching: function(table, filter, skipFirst) 是造成焦点丢失的原因,但我不知道如何修改它以使选项卡到下一个单元格和过滤器都工作。
    • 我找到了一个解决方案是阻止tab键在jquery.tablesorter.widgets.js的表格上启动搜索功能
    【解决方案2】:

    我明白了。

    jquery.tablesorter.widgets.js的第604行,我改了....

    此检查:

    if (event.type === 'filterReset') {
        c.$table.find('.' + ts.css.filter).add(wo.filter_$externalFilters).val('');
        ts.filter.searching(table, []);
    }...
    

    阅读:

    if (event.which !== 9){
    } 
    else if (event.type === 'filterReset') {
        c.$table.find('.' + ts.css.filter).add(wo.filter_$externalFilters).val('');
        ts.filter.searching(table, []);
    } .....
    

    到目前为止,这似乎在不破坏任何排序功能的情况下修复了选项卡功能。

    (公平地说,这可能会产生一些未知的副作用)

    Here is a demo of the working version

    【讨论】:

    • 很高兴您找到了解决方案。我想我实际上找到了罪魁祸首......设置showProcessing: true似乎导致表格失去焦点;我猜想从表中添加/删除一个类名会导致它重绘,或者其他什么。所以不需要修改小部件代码。
    • @mottie 我尝试设置showProcessing: false 并将我的更改恢复为jquery.tablesorter.widgets.js,但这样做会导致不同的奇怪副作用。使用此解决方案,如果表格比浏览器窗口长,并且用户向下滚动并单击可编辑单元格,则该单元格将按预期激活。但是,如果您随后单击第二个单元格或按 Tab 键移动到下一个单元格,则表格将向上滚动到顶部。单元格本身仍处于活动状态,但表格会滚动,因此您无法再看到活动单元格。
    • 这是一个带有showProcessing: false 和原始jquery.tablesorter.widgets.js 的测试页:pnrbuilder.com/ftpdevtest/tablesorterTest/… Scoll 到表格底部并单击一个单元格,然后单击另一个单元格。表格滚动到顶部。如果您向下滚动,您单击的单元格仍处于活动状态。
    • 这是一个测试页面,其中包含我对jquery.tablesorter.widgets.js 所做的更改并离开showProcessing: true pnrbuilder.com/ftpdevtest/tablesorterTest/… 这种方式按预期工作。同样,虽然我的方式可能有它自己尚未发现的副作用
    猜你喜欢
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 2021-05-20
    • 2019-01-10
    • 1970-01-01
    相关资源
    最近更新 更多