javascript - .show() 导致可滚动 DIV 在 Firefox 中跳转到顶部

标签 javascript jquery firefox

我有一个带有行(和隐藏行)的可滚动 div 。单击其中一行会显示下一个隐藏的同级行。

但是,在 Firefox 中,单击一行会导致可滚动 div 跳回到顶部,而且只是第一次。向下滚动并单击一行,滚动条将保持在原来的位置。

IE 和 Chrome 不会重置滚动条,这非常令人沮丧。

http://jsfiddle.net/xyan/TH4X3/

HTML:

为了提供足够的信息以形成滚动条,HTML 很长。由于篇幅较长,我就不在这里发布了。

Javascript:

var trackingresults = {
    pos: [],
    container: {},
    data: {}
}
trackingresults.container = $('#test-tracking');
trackingresults.container.delegate('tr:not(.history)', 'click', function() {
    if ($(this).next('tr').is(':visible')) {
        $(this).find('td.details').removeClass('collapse').addClass('expand');
        $(this).removeClass('current');
        $(this).next('tr').hide();
    } else {
        $(this).find('td.details').removeClass('expand').addClass('collapse');
        $(this).addClass('current');
        $(this).next('tr').show();
    }
    return false;
});
trackingresults.container.delegate('tr:not(.history)', 'hover', function() {
    if ($(this).find('td.details').hasClass('hover')) {
        $(this).find('td').removeClass('hover');
    } else {
        $(this).find('td').addClass('hover');
    }
    return false;
});

建议的“类似问题”链接之一 this problem 。这看起来很相似,但可能有足够的不同来保证这个问题。

有什么办法可以防止跳跃吗?

最佳答案

我重构了你的代码,问题就消失了:http://jsfiddle.net/TH4X3/6/

您不需要 .hover() 处理程序或 .hover 类,只需通过 :hover 在 css 中执行即可。将此选择器替换为:#test-shipments td.hover:

#test-shipments tr.current, #test-shipments tr:hover td {
    background-color: #B1C3C4;
}

您不需要 .collapsed 类 - 只需将其设为默认值并让 .expanded 覆盖默认值即可。

无需显式显示和隐藏下一行,只需使用 css 来完成,基于之前的同级 .expanded 类。使用相邻的同级选择器 - +:

#test-shipments tr.expand + tr.history {
    display: table-row;
}

仅通过这些 css 调整*,您就可以将 JavaScript 减少到这样:

var trackingresults = {
    pos: [],
    container: {},
    data: {}
}
trackingresults.container = $('#test-tracking');
trackingresults.container.delegate('tr:not(.history)', 'click', function() {
    $(this).toggleClass("expand");
});

作为副作用,您的 Firefox 滚动问题消失了!

* 加上一些 IE7 破解,请参阅 the jsFiddle

关于javascript - .show() 导致可滚动 DIV 在 Firefox 中跳转到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8363765/

相关文章:

javascript - OnClick 或 OnHover 事件监听 javascript 中的所有 IMG

javascript - 实现 TreeView 的最佳方法是什么?

javascript - jQuery在div上绑定(bind)点击事件

html - 固定第一列表第一列在 Firefox 中 td 调整大小后消失

javascript - 通过他的URL动态定义图片的宽度是真的吗?

javascript - 某个函数无法与 Socket.io 一起使用

javascript - 如何使用 jquery 和 codeigniter 从 foreach 循环获取当前值

html - Firefox 中 anchor 内的输入框中没有文本选择

css - css background-size 在 FF 3.6.x 中不起作用吗?

javascript - 将相同高度的 div 应用于另一个 div,并在调整大小时进行填充