3

在这张地图上:

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 的一些东西......这是点击事件处理程序......可能是因为它返回 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;
});

编辑:分配给 window.location.hash 在 IE7 和 IE8 中由于通过 HTTP“位置”标头进行页面重定向而加载的页面上的中断。解决方案是返回一个带有 Javascript 的页面,该页面本身将执行重定向。请参阅乔拉普的答案。

4

6 回答 6

7

location对象被分解成几个属性 -href只是其中之一

另一个,hash,是你要找的。

top.location.hash = 'top';

您也可以完全不使用 location/href 来执行此操作 - 只需使用scrollTo()

top.scrollTo( 0, 0 );
于 2009-07-23T18:04:37.970 回答
7

我有这个代码在生产中,它在 IE7 中运行良好......

location.hash = "#top";

但是,如果您只是想滚动到顶部,这应该会容易得多......

window.scrollTo(0, 0);
于 2009-07-23T19:49:50.020 回答
3

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

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

发现这一点后,我能够在 StackOverflow 的其他地方找到修复程序(请参见此处)。解决方案是让浏览器通过 Javascript 重定向。在这里,我从另一个 StackOverflow 页面重新发布解决方案:

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

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

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

于 2011-03-09T04:34:07.893 回答
2

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

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

于 2009-07-23T17:51:00.680 回答
0

您必须在附加之前检查哈希。我用这个做到了,

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

于 2014-08-13T18:53:23.760 回答
-1
window.location.href = '#top';

如果这不起作用,请尝试完整的 URL

window.location.href = 'http://domain.com/my.html#top';
于 2009-07-23T17:51:55.840 回答