【问题标题】:window.location not working correctly in IE7/8window.location 在 IE7/8 中无法正常工作
【发布时间】:2023-03-13 19:57:01
【问题描述】:

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

【问题讨论】:

  • 尝试显式设置href 属性。 window.location.href = href;
  • window.location.href 可能有效!
  • 为我工作:jsfiddle.net/ACaKu 你能去那里检查一下吗?一些事情要尝试:从“details/”中删除尾部斜杠,location.href = href,使用绝对路径。尝试从 url 栏中输入 javascript: window.location='details/'; void(0);
  • window.location.href 也不能正常工作。它适用于除 IE7/8 以外的所有浏览器。删除尾部斜杠不是一个选项,网址是动态添加的,我不控制它的语法。

标签: javascript jquery xhtml


【解决方案1】:

我将其发布为不同的答案,因为它是不同的答案。如何使用 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 完成许多 URL 修复/转换。例如,删除尾部斜杠时可以使用

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

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

您能否在互联网上发布一个网页,我们可以访问该网页以查看我们自己的 IE 副本上的问题?您能否发布一个 HTML 文件,我们可以将其复制到我们的机器并在浏览器中查看?您对另一个问题的评论告诉我您有某种 XHTML 严格的 DOCTYPE。如果我们中的一个人可以让问题发生在我们身上,那么它更有可能得到解决。

【讨论】:

    【解决方案2】:

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

    尝试在location 对象中显式设置href 属性:

    window.location.href = href;
    

    【讨论】:

    • 值得一试,但我从未见过这是个问题
    【解决方案3】:

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

    window.location = href;
    

    工作正常,如果你在此之后输入另一个命令。

    window.location = href;
    return false;
    

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

    【讨论】:

      【解决方案4】:

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

      1. 你可能只是想试试 jQuery 是否会为你处理它

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

        编辑:这并没有解决问题

      2. 此外,您可能只想将整个&lt;div 放入带有style="display: block; text-decoration: none"&lt;a 标记中。您可以使用字体颜色和下划线使里面的文本看起来像您想要的那样。此外,此解决方案不需要 JavaScript。它还使整个 div 显示为有焦点,而不仅仅是 a 或什么都没有。

      【讨论】:

      • 1.我不认为这是一个干净的解决方案。 2. 这不是一个选项,我为示例剪掉了 HTML。实际上 div 内部还有更多的块元素,这意味着我必须将内部的所有块元素更改为一个跨度,包括当前的 a。那会让事情变得一团糟。
      • @Gregory:好的,关于第二项:2。divs、ps 和其他块标签在 a 内就可以了,只要您在 a 上使用 display:block外内部的 a 将被更改为 u,因为它不再处理点击操作,它只是为了看起来不错。外部 a 将处理点击操作。
      • 我使用的是严格的文档类型,在 a 中使用块元素将无法验证。我喜欢我的代码干净。
      猜你喜欢
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 2012-06-12
      • 2011-11-02
      • 1970-01-01
      相关资源
      最近更新 更多