【问题标题】:Table not refreshing properly after jQuery manipulations, in Google Chrome在 Google Chrome 中,jQuery 操作后表格无法正确刷新
【发布时间】:2010-07-21 14:48:35
【问题描述】:

我向another of my questions 发送了solution。但是,经过最近的一些更改,它在 Firefox 3.6 中看起来不错,但在 Google Chrome 中却显示出非常糟糕的显示异常。在 JavaScript 代码更改其位置后,它似乎没有刷新/重绘表格标题行。

当浮动表格标题行位于表格中间某处时尤其明显,然后您快速向上滚动:它会在表格中间留下标题行的副本,并且无法正确重绘表格.

The online demo is located here.

源代码在Mercurial bitbucket repository, here

如果有人能指出一个干净的解决方案,让它在 Google Chrome 中正确刷新显示,我将不胜感激。

更新:我在 Ubuntu Linux 10.04 和 Windows XP 上都看到了它,Chrome 版本为 5.0.375.99 beta。它在 Linux 上似乎更明显,但在 Windows 上也是一个问题。我刚刚在 Linux 上获得了 5.0.375.125 测试版,它仍在进行中。

我将通过issue in BitBucket 跟踪此事。

更新 2011 年 1 月 26 日:我已经在 Ubuntu Linux 10.04 上使用 Chrome 9.0.597.67 测试版对此进行了测试,问题似乎不再明显。

【问题讨论】:

    标签: jquery html google-chrome


    【解决方案1】:

    新答案:

    我可以通过将重置延迟一“帧”执行来解决 Windows 上的问题。将 else 条件包装在 setTimeout 中:

                    setTimeout(function() {
                        floatingHeaderRow.css("visibility", "hidden");
                        floatingHeaderRow.css("top", "0");
                    }, 1);
    

    老答案:

    我认为 Windows 版 Chrome 上没有出现问题(我刚刚尝试过)。但是,切换到 position:fixed 而不是 position:absolute 可能会更好地执行并解决您的问题。只需使用间隔检查是否需要滚动并设置位置:固定,否则返回。

    【讨论】:

    • 感谢您的建议。我在想position:fixed 可能会使水平定位更具挑战性——例如,处理左边距、水平滚动。但也许不会太难。
    • 我可以在 Chrome for Windows (Windows7/IE8) 上重现该问题。但是,我只能在第一个表而不是第二个(更薄的)表上重新创建问题。我还注意到,有时,在第一个表上,根据我的滚动速度,我可以让标题只显示一行的一部分,以便右列标题只显示“table 1 col”,即使这样也只有该行的一半可见。
    • 我在 Windows XP 上进行了检查,我也看到了它。但是,它在 Linux 中更为明显。正如艾莉森所说,在第一张桌子上也更引人注目。
    • 我的修复很简单,在 Windows 上肯定可以解决。你能回答说它是否对你有用吗?
    • 是的,这似乎可以解决这个问题。在 Linux 上,向下滚动第一个表时也会出现一些刷新问题,所以我将整个函数包装在 setTimeout() 中,这也解决了这个问题。它似乎使滚动更加缓慢,但不是很多。绝对是一个值得进一步考虑的想法。
    【解决方案2】:

    解决方案要简单得多,Chrome 的问题在于表头中有 2 。

    <thead>
    <tr class="tableFloatingHeader" style="position: absolute; left: 0px; visibility: hidden; top: 0px; ">
        <th>table1 col header</th>
        <th>table1 col header</th>
    </tr><tr class="tableFloatingHeaderOriginal">
        <th>table1 col header</th>
        <th>table1 col header</th>
    </tr>
    </thead>
    

    去掉一个,你的问题就解决了

    【讨论】:

    • 如果我删除它,那我的answer 对我的original question 的意义就会失效。
    • 我还是不明白为什么一个表需要2个标题行,你可以实现一个jquery滚动事件处理程序。当滚动位置> header.position时,将滚动位置添加到标题行位置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多