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

时间:2011-01-27 16:18:01

标签: javascript jquery xhtml

我有一个内部有一个div。我想点击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。它重新加载页面,但保持在同一页面上。我检查了var 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;
    });
});

4 个答案:

答案 0 :(得分:3)

正如我在评论中提到的,我不是100%肯定它(IE7 + 8如何处理.location对象),但毕竟它只是一个对象。

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

window.location.href = href;

答案 1 :(得分: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长度。确保长度匹配。如果长度太大,则表示存在隐藏字符。

如果您确定问题是由语法引起的,则可以使用JavaScript完成许多网址修复/转换。例如,可以使用

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

此外,如果可以解决问题,可以使用JavaScript将URL转换为绝对URL。任何其他麻烦甚至不可见的字符都可以删除或替换。

您可以在互联网上发布网页,我们可以访问这些网页以查看我们自己的IE副本上的问题吗?您可以发布我们可以复制到我们的机器并在浏览器中查看的HTML文件吗?你对另一个问题的评论告诉我你有某种XHTML严格的DOCTYPE。如果我们中的一个人能够在我们的结束时解决问题,那么它就更有可能被修复。

答案 2 :(得分:1)

虽然主题已经过时,但它并没有过时。我遇到了同样的问题。

window.location = href;

如果在此之后添加另一个命令,则工作正常。

window.location = href;
return false;

这对我有用,并使用正确的网址重定向。希望这可以帮助其他人解决同样的问题。

答案 3 :(得分:0)

不完全是你问题的直接答案,但我有两个建议

  1. 您可能只想尝试查看jQuery是否会为您处理

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

    编辑:这没有解决问题

  2. 此外,您可能只想将整个<div转换为<a标记style="display: block; text-decoration: none"。您可以使用字体颜色和下划线使文本内部显示您想要的内容。此外,此解决方案不需要JavaScript。它也使整个div节目集中而不仅仅是a或者根本没有。