Javascript 如何防止DOM操作后页面的滚动位置重置?
我有两个JS函数,一个是向选择框添加选项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
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;