Javascript 如何防止DOM操作后页面的滚动位置重置?

Javascript 如何防止DOM操作后页面的滚动位置重置?,javascript,html,dom,scroll,Javascript,Html,Dom,Scroll,我有两个JS函数,一个是向选择框添加选项 function addOption(selectId, text, value) { var selectbox = document.getElementById(selectId); var optNew = document.createElement('option'); optNew.text = text; optNew.value = value; try { selectbox.a

我有两个JS函数,一个是向选择框添加选项

function addOption(selectId, text, value) {
    var selectbox = document.getElementById(selectId);
    var optNew = document.createElement('option');
    optNew.text = text;
    optNew.value = value;
    try {
        selectbox.add(optNew, null); //page position resets after this
    }
    catch(ex) {
        selectbox.add(optNew);
    }    
}
另一个是在一个类似的简单函数中执行document.getElementByIdformId.appendChildnewHiddenInput

它们都可以工作,元素按预期添加。但是,在调用其中一个后,页面会在IE6和FF中将其滚动位置重置为页面顶部。没有回发,这纯粹是客户端操作。我在Firebug中设置了断点,它在执行element.appendChild或select.add之后立即发生。我知道我可以使用JS手动设置滚动位置,但我认为当页面没有被重新呈现时,没有必要这样做

我不是JS或DOM方面的专家,所以我很可能遗漏了一些东西,但我已经用Try it Here选项查看并运行了他们的示例,我无法复制这个问题,这表明我正在使用的代码库是罪魁祸首


知道为什么要重置滚动位置吗?如果jQuery提供了更好的替代方案,我也可以使用它。

如果从链接调用函数,您的链接中可能有一个内部锚:

http://www.website.com/page.html#
这导致了上述行为。默认行为是,如果不存在锚定,页面滚动位置将跳转到顶部scrollTop=0


如果每次函数调用都发生这种情况,而不考虑源,则可以将其从列表中删除。

什么是激活事件

如果它是一个锚,那么在点击事件上,你需要返回false;在调用jQuery/Ajax/jScript代码之后

如果它是一个按钮,你可能需要做同样的事情

我昨天有这个问题,这就是决议


所以

谢谢你!这些函数是从样式按钮调用的。我已将它们切换到span标记,这解决了问题。这不一定是解决方案,但可能是在您的情况下。作为将来的参考,在使用锚定标记时,您通常希望在其中包含有效的href,但可能不希望实际将其放在任何地方,因为您正在使用javascript预先阻止该行为。这时您需要使用返回:false;