2016-02-26 74 views
3

我有一个外部div与style.overflow设置为auto。它包含一个更大的子div,它使外部div变成可滚动的。当内部div被给予焦点时防止div滚动到顶部 - IE 11

当外部div滚动到底部时,给内部div赋予焦点会导致滚动位置返回到左上角(0,0)。这只是发生在IE 11的问题的工作示例通过下面的链接(点击时的股利将获得焦点)

https://jsfiddle.net/wy6u8b76/6/

提供的是有没有办法阻止窗口滚动到顶部?

回答

1

我能够通过预先设置scrollTop为0来解决此问题,然后移动边距使其保持在同一位置。最后,你可以撤消所有这种疯狂。

下面是修改后的示例:https://jsfiddle.net/2n1f25nk/1/

document.getElementById('div1').onclick = function() { 
    var div1 = document.getElementById('div1'); 
    var div2 = document.getElementById('div2'); 
    var scrollTop = div1.scrollTop; 
    div2.style.marginTop = (-scrollTop) + 'px'; 
    div1.scrollTop = 0; 
    // give focus to inner div 
    document.getElementById('div2').focus(); 
    // Undo the horribleness 
    div2.style.marginTop = '0px'; 
    div1.scrollTop = scrollTop; 
} 
+0

使用'setActive'尝试。这就像没有滚动的“焦点”,它只在IE中可用。这里有一个链接到另一篇文章,我描述了我如何使用它来完成基本相同的事情。 https://stackoverflow.com/questions/40901431/ie11-focusing-child-div-causes-parent-to-scroll-to-top/40923837#40923837 –