在IE7/8中,window.location无法正常工作

4

我有一个 div,里面有一个 a。我想点击 div 并跟随与 a 相同的 URL。这是 HTML 代码:

<div class="overview white getchildurl">
    <p class="w70">
    05-02-2011
    </p>
    <a class="button" href="details/">Details</a>
    <span class="clear"></span>
</div>

我有这个脚本:

$('.getchildurl').each(function() {     
    $(this).click(function() {
        var href = $(this).children('a').first().attr('href');
        window.location = href;
    });
});

这段代码在Firefox 3.6、Chrome和Safari中可行,但在IE7和IE8中不行。它可以重新加载页面,但仍停留在同一页面。我检查了变量href,它具有正确的url,但是没有跳转到那里。我做错了什么?

谢谢。

编辑:将其改为绝对URL后,它可以工作。这是新脚本:

$('.getchildurl').each(function() {     
    $(this).click(function() {
        var href = $(this).children('a').first().attr('href');
        var host = window.location.hostname;
        window.location = 'http://' + host + '/' + href;
    });
});

尝试显式设置 href 属性。window.location.href = href; - jAndy
window.location.href 可能有效。 - Steven Spielberg
对我来说可以:http://jsfiddle.net/ACaKu/ 你能去那里检查一下吗?有几件事情可以尝试:从“details/”中删除尾随斜杠,location.href = href,使用绝对路径。尝试只从url栏中键入 javascript: window.location='details/'; void(0); - Ruan Mendes
window.location.href在IE7/8中无法正常工作,但在其他所有浏览器中都可以。删除尾随斜杠不是一个选项,因为URL是动态添加的,我无法控制它的语法。 - Gregory Bolkenstijn
4个回答

3

正如我在评论中提到的那样,我并不完全确定(IE7+8如何处理.location对象),但毕竟它只是一个对象。

尝试在location对象内明确设置href属性:

window.location.href = href;

值得一试,但我从未见过这成为问题。 - Ruan Mendes

3

我将作为一个不同的答案发布这篇文章,因为它是一个不同的答案。如何通过JavaScript解决问题,而不是通过HTML和CSS解决问题。

尝试更改你的JavaScript代码以显示并确保值与你所想的一样。

$(this).click(function() {
    var href = $(this).children('a').first().attr('href');
    alert(href)
    alert(href.length)
    window.location = href;
});

这将显示hrefhref的长度。确保长度匹配。如果长度过大,则表示存在隐藏字符。

如果确定问题是由于语法引起的,许多URL修复/转换可以使用JavaScript完成。例如,当有一个尾随斜杠时,可以使用以下方法移除它:

$(this).click(function() {
    var href = $(this).children('a').first().attr('href');
    window.location = href.replace(/\/$/, '');
});

此外,如果使用JavaScript将URL转换为绝对URL,可能会解决问题。任何其他有问题的甚至是不可见字符都可以被删除或替换掉。您能否在互联网上发布一个网页,让我们可以访问并查看IE上的问题?您能否发布一个HTML文件,我们可以将其复制到我们的机器上并在浏览器中查看?您在另一个问题的评论中提到了某种XHTML严格DOCTYPE。如果我们中的一些人可以在我们这端复现问题,那么问题更容易被解决。

1

虽然这个话题很老,但它并不过时。我刚遇到了同样的问题。

window.location = href;

如果在此之后加入另一个命令,它就能正常工作。

window.location = href;
return false;

这对我有用,并且重定向到了正确的URL。希望这能帮助其他遇到同样问题的人。


0

这并不是对你问题的直接答案,但我有两个建议

  1. 你可能想尝试看看jQuery是否能为你处理它

    $(this).children('a').first().click()
    

    编辑:这并没有解决问题

  2. 此外,您可能只想将整个<div变成一个<a标签,并使用style="display: block; text-decoration: none"。您可以使用字体颜色和下划线来使内部文本看起来任何您想要的样子。此外,此解决方案不需要JavaScript。它还使整个div显示为焦点,而不仅仅是a或根本没有。


  1. 我认为这不是一个干净利落的解决方案。
  2. 这不是一个选项,我为了示例缩减了HTML。实际上,div内有很多其他块元素,这意味着我必须将所有块元素都改为span,包括当前的a。那会变得一团糟。
- Gregory Bolkenstijn
@Gregory:好的,关于第二点:2. divp和其他块级标签在a标签内部使用是可以的,只要你在外层的a上使用display:block。内部的a将被更改为u,因为它不再处理点击操作,它只是用来美化页面。外层的a将处理点击操作。 - 700 Software
我正在使用严格的文档类型,将块元素放在a标签内将无法通过验证。我喜欢我的代码整洁。 - Gregory Bolkenstijn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接