当textarea实际在视线中时,如何防止IE10自动滚动到焦点上的textarea

时间:2013-07-12 09:16:23

标签: javascript internet-explorer internet-explorer-10

我刚刚发现IE10(也许还有IE9和IE8)会急切地滚动到textarea中的光标位置,当我在jQuery中focus一个textarea时,即使textarea和光标在视线中。它将如此紧密地滚动到textarea,这真的令人不安。

我做了一个在线示例:http://larryzhao.com/test.html

我在页面上放了一个大的div来将textarea推到页面的底部,并在页面加载时在textarea上调用focus

然后你可以看到,在用IE10打开页面时,它会自动滚动到textarea,即使它已经是洞察力,相反,Chrome也不会。

我在顶部放置了一个固定的<a>,点击后它也会在textarea上调用focus。因此,如果您滚动到顶部并单击带有textarea的链接,IE10仍将执行滚动。

我有两个问题:

  1. 是否有一种简单的方法可以防止IE10(或IE9 / 8)这样做?为了达到与Chrome相同的行为。

  2. 是否有任何其他行为会在IE10中触发这种奇怪的行为?

  3. 非常感谢。

1 个答案:

答案 0 :(得分:0)

试试这个:

$(document).ready(function () {
    var top = $('textarea').offset().top;
    function isScrolledIntoView(elem) {
        var docViewTop = $(window).scrollTop();
        var docViewBottom = docViewTop + $(window).height();

        var elemTop = $(elem).offset().top;
        return (docViewBottom > elemTop);
    }
    if (!isScrolledIntoView($('textarea')[0])) {
        $('textarea').focus(function () {
            $(window).scrollTop(top-120);
        });
    } else {
        $('textarea').focus(function () {
            $(window).scrollTop(0);
        });
    }

    $('textarea').focus();
    $('a').click(function () {
        $('textarea').focus();
    });
});