【问题标题】:Internet Explorer 6 aborts page request when javascript executesjavascript 执行时 Internet Explorer 6 中止页面请求
【发布时间】:2010-10-06 23:51:56
【问题描述】:

场景是这样的。一个网页包含:

  • 一些 DIV 的可见性可以用 javascript 切换(从超链接触发)
  • 提交按钮,响应时间大约为 5 秒

超链接代码是

<a href="javascript:void null;" onclick="MyFunction()">foo</a>

用户:

  1. 按提交。
  2. 在等待响应时,他单击了超链接,并触发了切换 DIV 可见性的 javascript(不执行其他请求)。
  3. 在 Internet Explorer 6 中,浏览器停止等待第一个请求。

在其他浏览器中不会出现此问题,即使用户使用 DIV,第一个请求也得到了正确处理,我们导航到下一页。

有谁知道这可能是什么原因造成的?这是一个已知的 IE6 问题吗?

【问题讨论】:

    标签: javascript html internet-explorer-6


    【解决方案1】:

    是的,这是 IE6 问题,超链接上的 GET 请求由 Javascript 操作触发( href 设置为 'javascript:...')。

    例如如果你的 JavaScript 调用 someForm.submit() 方法是 GET,会有NO回复( 请求肯定会发送)

    http://webbugtrack.blogspot.com/2007/09/bug-223-magical-http-get-requests-in.html

    你要么需要修改链接,就像:

    <a href="#bogushash" onclick="MyFunction()">foo</a>
             ^^^^^^^^^^
    

    或者总是用 return false 设置链接;

    <a href="javascript:void null;" onclick="MyFunction();return false;">foo</a>
                                                          ^^^^^^^^^^^^^
    

    【讨论】:

    • 感谢 cmets。我知道在 onclick 中返回 false 会阻止 HREF,但我认为 HREF 中的 javascript null 不会导致新请求并中止真实请求。在有人修改 MyFunction() 之前,该页面也可以正常工作。
    • 也许您必须检查对 MyFunction() 的更改以了解原因?
    • key是你的函数是提交表单,还是修改location.href,对吗?这就是导致该错误的原因。两种解决方法都有效。
    • 没有。 MyFunction() 中的位置或 HREF 没有任何改变,只是一些输入字段的值。无论如何,我将 href 更改为 #foo 并在我的 onclick 中返回 false,以避免出现问题。
    【解决方案2】:

    我真的不认为调用 javascript:void null; 是明智的。从链接。这可能会导致您的问题。而是让 href 包含有效链接,但阻止默认操作完成请求

    <a href="#" onclick="return MyFunction(event)">foo</a>
    

    在哪里

    function MyFunction(e)
    {
      if (!e) e = window.event;
    
      // your code
    
      if (e.preventDefault) e.preventDefault();
      return false;
    }
    

    【讨论】:

      【解决方案3】:

      javascript:void null 应该是 javascript:void(0),更好的是 href="#"。如果 MyFunction 返回 false,则不需要在 scunliffe 的答案中使用 return false,使用 onclick="return MyFunction()"

      【讨论】:

      • 我个人更喜欢 "#fakelink" 语法,因为 "#" 被解释为 "top",这会导致浏览器在卸载页面之前跳转到屏幕顶部,这在长时间内会非常刺耳页。 #fakelink 当然无处可去,因为没有该名称的位置。
      【解决方案4】:

      因为这是一个问题。我建议使用一个伪“加载”微调器,在触发提交时覆盖可点击内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-19
        • 1970-01-01
        相关资源
        最近更新 更多