window.location = #anchor在IE中不起作用

时间:2009-07-23 17:49:18

标签: javascript internet-explorer hash anchor window.location

在这张地图上:

http://web.pacific.edu/documents/marketing/campus-map/version%202/stockton-campus-2.0.htm

我在顶部有一个锚点,我希望页面在点击链接时跳转到锚点。

我正在使用

window.location = '#top';

在FF,Opera和Chrome中可以正常工作,但在IE 7中却没有。

我已尝试过所有排列,例如window.location.hash和window.location.assign()以及scrollIntoView(true)和focus()。

如何让它在IE中运行?

编辑:似乎没有什么工作,这让我觉得这不是语法,而是关于JS的东西......这里是click事件处理程序......可能是因为它返回false ?我正在抓稻草。

// Click handler for each location link
$('#index a').click(function()
{
    hideMarkers();
    location.href = location.href + "#top";
    var marker = showMarker( $(this).attr('data-id') );
    GEvent.trigger( marker, "click" );
    return false;
});

编辑:对于通过HTTP“Location”标题页面重定向加载的页面上的IE7和IE8中的window.location.hash赋值。解决方案是返回一个带有Javascript的页面,它本身将执行重定向。请参阅Joe Lapp的答案。

6 个答案:

答案 0 :(得分:7)

location object分为几个属性 - href只是其中之一

另一个,hash,正是您正在寻找的。

top.location.hash = 'top';

您也可以在不使用location / href的情况下执行此操作 - 只需使用scrollTo()

即可
top.scrollTo( 0, 0 );

答案 1 :(得分:6)

我在生产中有这个代码,它在IE7中工作正常......

location.hash = "#top";

但是,如果你只是想滚动到顶部,这应该会更容易......

window.scrollTo(0, 0);

答案 2 :(得分:3)

我还遇到了 windows.location.hash 在所有浏览器中工作的问题,但IE7和IE8(至少在Vista上)。经过多次实验,我发现页面重定向打破了哈希分配。

如果从通过HTTP“Location”标题重定向而加载的页面中为windows.location.hash分配值,则IE7或IE8中将发生错误。

在发现这个之后,我能够在StackOverflow(see here)的其他地方找到修复程序。解决方案是通过Javascript重定向浏览器。在这里,我从其他StackOverflow页面重新发布解决方案:

<html>
<head>
    <meta http-equiv="refresh" content="0; url=__REDIRECT_LOCATION__">
    <script>window.location = "__REDIRECT_LOCATION__";</script>
</head>
</html>

这可以解释为什么有些人设置哈希有问题而有些人没有,但我不知道线程的发起者是重定向。

我还应该指出,我不能只使用scrollTo(),因为我的目的是在不重新加载页面的情况下从地址栏中删除哈希标记,而不是滚动。

答案 3 :(得分:2)

location.href = location.href.split("#")[0] + "#top"

编辑:避免有两次哈希的可能性。

答案 4 :(得分:0)

在附加哈希之前,您必须检查哈希值。我这样做了,

window.location = ((location.href).indexOf('#') == -1 ? location.href + "#top" : location.href);

答案 5 :(得分:-1)

window.location.href = '#top';

如果这不起作用,请尝试使用完整的网址

window.location.href = 'http://domain.com/my.html#top';