IE11-Only Submit Bug

IE11-Only Submit Bug

本文关键字:Bug Submit IE11-Only      更新时间:2023-09-26

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

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

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

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

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

为了避免它,这似乎做得很好(如前所述,其他所有IE都有效)。关于问题可能在哪里,有什么见解吗?

当表单只有输入元素而没有name属性(或没有输入元素)时,就会出现问题。我在这里找到了这个错误的参考,尽管它也发生在桌面模式下,而不仅仅是链接所说的城域模式:

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

修复方法是在提交表单之前创建一个伪<input type="hidden" name="dummy" value="something">字段(设置名称和值)

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

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

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

这是IE11中的一个错误。如果你在按钮上添加一个名称属性,你可以修复它,比如:

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

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

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

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

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

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

对于IE11,有:

event.returnValue = false;

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

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

您的问题是由服务器端的.net 4问题引起的。请阅读:"WebForm_DoPostBackWithOptions"在IE11预览中未定义

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

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