【问题标题】:IE11-Only Submit BugIE11-Only 提交错误
【发布时间】:2013-12-07 14:55:38
【问题描述】:

我在页面上有一个表单,很简单,例如:

<form action="form/submit" method="post">
    <button type="submit">Submit</button>
</form>

它适用于每一个浏览器,包括旧版本的 IE,但在 IE11 中它失败了,标签卡在连续加载循环中,提交后永远不会更改为“谢谢”页面。但是,如果我打开控制台,它确实可以工作。

我知道 IE 的 console.log 问题,并且已经在使用:

if (!window.console) {
    console = {
        log: function() {}
    };
}

为了避免它,这似乎做得很好(如前所述,其他所有 IE 都可以使用)。关于问题可能出在哪里的任何见解?

【问题讨论】:

  • 您在为onsubmit 事件使用JavaScript 吗?或者这只是一个“正常”的形式?
  • 你确定兼容模式是off吗?有时,当打开开发者控制台时,IE 会改变页面的呈现和工作方式。
  • console 的功能不止log,具体取决于您的浏览器。也许你在某个地方遇到了错误?
  • @RocketHazmat $("form").submit 正在使用中。
  • @Nunners 我看到它在 Edge(文档模式)下运行,不知道是否还有其他兼容性选项?

标签: javascript forms internet-explorer internet-explorer-11


【解决方案1】:

当表单只有输入元素而没有name 属性(或没有输入元素)时,就会出现问题。我在这里找到了对该错误的引用,尽管它也发生在桌面模式下,而不仅仅是链接声称的 Metro 模式:

http://connect.microsoft.com/IE/feedback/details/807447/ie-11-metro-version-submitting-form-fails-if-input-tag-has-no-name-attribute

解决方法是在提交表单之前创建一个虚拟的 &lt;input type="hidden" name="dummy" value="something"&gt; 字段(设置名称和值)。

该错误发生在 IE11 提供的所有兼容模式中。

【讨论】:

  • 这发生在我身上,但这个修复不起作用。也许是新错误?
【解决方案2】:

我只是在这个错误上花费了太多时间。疯狂的部分是,如果您打开了开发工具 (f12),IE11 允许表单提交。这是我在提交按钮之前放置的内容:

<input type="hidden" name="ie11sux" id="ie11sux" value="<?php echo md5(microtime()."ie11sux"); ?>"/>

【讨论】:

    【解决方案3】:

    这是 IE11 中的一个错误。如果为按钮添加名称属性,则可以修复它,例如:

    <button type="submit" name="foo" ...
    

    【讨论】:

    • 正确,但如果不添加 value 属性,这将不起作用。
    【解决方案4】:

    没有命名元素的表单将导致在 IE11 + W8.1 上提交时出现无限循环。要解决这个问题,只需向按钮添加属性 name

    <form action="form/submit" method="post">
      <input type="submit" name="cm" value="Submit">
    </form>
    

    【讨论】:

      【解决方案5】:

      这与 OP 的问题没有直接关系,而是一个仅限 IE 的表单提交问题:

      如果您在提交事件期间碰巧设置了form.prop('disabled', true),其他浏览器仍然会发送表单数据,但 IE 不会 - 它会发送一个空的请求正文。

      【讨论】:

      • 即将检查这个 - 但这听起来正是我目前正在解决的问题!
      【解决方案6】:

      对我来说,我有标记为必填的空隐藏字段。相当愚蠢,但它是对我有用的解决方案。

      【讨论】:

        【解决方案7】:

        对于 IE11,有:

        event.returnValue = false;
        

        检查 event.preventDefault 是否存在以防止最终错误:

        event.preventDefault ? event.preventDefault() : (event.returnValue = false);
        

        【讨论】:

          【解决方案8】:

          您的问题是由服务器端的 .net 4 问题引起的。 请阅读:'WebForm_DoPostBackWithOptions' is undefined in IE11 Preview

          你可以开启你的IE调试功能并尝试提交,你可能会看到错误:WebForm_DoPostBackWithOptions

          我通过以下补丁修复了 IE11 的类似提交问题: http://support.microsoft.com/kb/2836939

          【讨论】:

          • OP 根本没有提到 .NET。
          猜你喜欢
          • 2022-11-17
          • 1970-01-01
          • 2011-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多