javascript:避免浏览器在内容插入时滚动回顶部

标签 javascript jquery

我认为这很容易解决,但我似乎无法在任何地方找到解决方案。 这是一个非常烦人的 javascript“功能?”。每次我向 div 添加内容时,文档都会滚动回顶部。我怎样才能避免这种烦人的行为?

n = 0;
function addContent() {
    div = document.getElementById('content');
    for(var i = 0; i < 100; i++) {
        n++;
        div.innerHTML = div.innerHTML + n + '<br />';
    }
}

</script>
</head>

<body>
<div id="content"></div>
<a href="#" onclick="addContent()">more content</a>

例如:http://jsfiddle.net/hQP2q/

最佳答案

这里的问题是,

当您单击 anchor 链接时,会触发为该元素注册的 onclick 事件处理程序。

现在 anchor 标记的默认行为是导航到它自己的 href 属性。

在你的情况下,这两种情况都会发生,所以 url 被导航到“#”。 “#”充当书签,因此浏览器将查找任何具有 id 的 html 元素,与 url 中# 之后的字符串相同。

因此解决此问题的解决方案是,在您的 onclick 处理程序中传递事件对象,当执行 onclick 处理程序时,只需使用事件对象来阻止元素点击行为的默认操作。

所以代码修改后会是这样。

<script>
     n = 0;
    function addContent(e) {
        div = document.getElementById('content');
        for(var i = 0; i < 100; i++) {
            n++;
            div.innerHTML = div.innerHTML + n + '<br />';
        }
        e.preventDefault();
        return false;
    }

    </script>
    </head>

    <body>
    <div id="content"></div>
<a href="#" onclick="addContent(event)">more content</a>

请看这里的 fiddle :http://jsfiddle.net/uKrpH/2/embedded/result/

关于javascript:避免浏览器在内容插入时滚动回顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14889166/

相关文章:

javascript - 直接从microstrategy获取导出的PDF文档

javascript - 如何使用 Angular 5 中的异步更新输入变化时的数组?

javascript - d3.js 以图像作为标签的雷达图

javascript - Jquery 事件 - 如何选择不包括某些内部区域的整个 DIV

javascript - 动态删除每一行,同时附加行索引

javascript - jsPlumb.on()函数规范

javascript - 是否可以从 powerpoint 中提取幻灯片并使用 node.js 将它们保存为图像?

javascript - 如何仅在用户第一次滚动到某个元素时运行自定义函数?

javascript - Ajax 用响应替换 html 但在加载 css、js 后加载内容

javascript - 如何使用 javascript(node.js) 从 Microsoft Dynamics CRM 接收 webhook?