Forms 为什么我的表单不在Internet Explorer 9中上载文件?

Forms 为什么我的表单不在Internet Explorer 9中上载文件?,forms,internet-explorer,file-upload,cross-browser,internet-explorer-9,Forms,Internet Explorer,File Upload,Cross Browser,Internet Explorer 9,欢迎收看第32342343集“为什么Internet Explorer如此糟糕?”… 我看过很多关于IE9上传文件的报道。很明显,它有很多关于什么时候起作用或不起作用的警告(如果有人有一个明确的清单,我很乐意看到)。然而,我发现的大多数问题/解决方案都与javascript有关,通常是jQuery表单插件或类似的东西 我的表单不是通过AJAX提交的,文件输入字段也不是用css隐藏或隐藏的。然而,我每天都从IE9上的用户那里得到几张支持票,他们试图提交表单,但“什么也没发生”(=表单提交。没有错误

欢迎收看第32342343集“为什么Internet Explorer如此糟糕?”…

我看过很多关于IE9上传文件的报道。很明显,它有很多关于什么时候起作用或不起作用的警告(如果有人有一个明确的清单,我很乐意看到)。然而,我发现的大多数问题/解决方案都与javascript有关,通常是jQuery表单插件或类似的东西

我的表单不是通过AJAX提交的,文件输入字段也不是用css隐藏或隐藏的。然而,我每天都从IE9上的用户那里得到几张支持票,他们试图提交表单,但“什么也没发生”(=表单提交。没有错误,但文件没有上传。)我没有收到任何关于不同浏览器的投诉,IE8甚至似乎工作正常(和以前一样)

这是我表格的顶部。我错过什么了吗

<form action="http://mysite.dev/account-settings/?open=resume" method="post" class="wpjb-form" enctype="multipart/form-data">    

        <input type="hidden" name="resume_form" value="resume_form" />
        <fieldset class="wpjb-fieldset-default">

            <input id="firstname" name="firstname" type="hidden" class="regular-text " value="John" />
            <input id="lastname" name="lastname" type="hidden" class="regular-text " value="Henry" />
            <input id="email" name="email" type="hidden" class="regular-text " value="john.henry@johnhenry.com" />

            <div class="wpjb-element-input-checkbox wpjb-element-name-is_active">
                <label class="wpjb-label">Show resume? </label>
                <div class="wpjb-field">
                    <label for="is_active_1"><input type="checkbox" class="" name="is_active" id="is_active_1" value="1" checked="checked" /> Yes <small style="display:inline;">(Uncheck to hide your resume)</small></label>

                </div>
            </div>
            <div class="wpjb-element-input-select-one wpjb-element-name-file">
                            <label class="wpjb-label">Upload a <i>new</i> resume file</label>
                <div class="wpjb-field">
                    <input style="line-height:1em;" id="file" name="file" type="file" class="regular-text " />
                    <small class="wpjb-hint">Accepted file types: doc, docx, odf, pdf, rtf</small>
                </div>
            </div>
        </fieldset>
        ...

显示简历?
是(取消选中可隐藏您的简历)
上传新的简历文件
接受的文件类型:doc、docx、odf、pdf、rtf
...
它是这样继续的,再加上两个
s,然后就这样结束了:

    ....
    <p class="submit">
        <input type="submit" name="Submit" id="wpjb_submit" value="Save Changes" />
    </p>
</form>
。。。。

更新 我为每个从未经历过这个问题的人感到高兴,但不仅仅是我:

更新2 我看到很多建议,添加一个元标签,以迫使用户代理IE8。。。

我不想这样做,因为尽管我确实支持IE8,但我网站上的许多元素在IE8和IE9中呈现的方式不同。这将创建一个相当草率的用户体验,因为任何IE用户都会在特定页面上体验到我临时“时间扭曲”回到IE8。

正如Graham所做的那样,我认为这可能更像是一个服务器问题——而且我在IE9(或更新版本)中从未遇到过文件上传问题-我猜您不想发布处理上载的PHP脚本的代码?

如果没有发送任何数据,您可以通过服务器端脚本上的隐藏输入来检查post数据。例如,如果您使用的是php,它将类似于

<? if($_POST['resume_form']=='resume_form'){
    //Do something
} ?>

或者你也可以使用IE的元兼容标签来呈现页面,就像IE8一样

<meta http-equiv="X-UA-Compatible" content="IE=8" />

我建议设置
X-UA-Compatible
元标记值,看看这是否有什么区别

有关可能的值,请参见此问题:


也可能是页面触发了IE9中的非标准模式。我建议在IE9中打开页面,打开开发者工具,看看选择了哪些浏览器/文档模式。这可能会给你一个线索。请注意,IE8之前不支持“enctype”表单属性,因此,如果浏览器使用的是较旧的文档模式,则无法识别该属性。

我可以通过在setTimeout中包装jQuery表单submit来修复这一噩梦般的问题:

$('#complete_profile input[type="submit"]').click(function(){
  setTimeout(function() {
    $('#complete_profile form').submit();
  }, 0);
});

但是,当表单确实提交时,这可能会导致重复提交,因此请小心。

好的,我宁愿留下一条评论,而不是答案,但我还没有这方面的要点

  • 用户是否处于怪癖模式?大多数IE用户不知道怪癖模式,在尝试刷新页面(而不是按F5)时可能意外单击了它。如果是间歇性的,这可能是原因

  • 从上往下看。。在服务器端,如何检查空字段?我更喜欢JS,在这里,您经常查找“”,null和undefined。我只是想,也许quirks模式发送了一些模糊数据,您的服务器端错误检查丢失了这些数据,因为您没有查找它,因此报告一切正常


  • 我只能纠正一个猜测,因为这应该很好(诅咒你,IE!)。因此,为什么它是一个注释:1)我们可以将其更改为非查询url吗?我过去在IE中遇到过查询问题。遗留JScript将查询作为关键字,可以在您不知道的情况下修改url的查询字符串。让我困惑了好几个星期。2) 也许我们还可以尝试验证服务器端是否接收到该文件?你说没有错误,但不应该有错误吗?它可以重定向回此页面重新提交(以及其他预填充的字段)。我将测试您对查询url的想法。至于验证服务器端收到的文件。。。它肯定不会保存在那里,因为同一个页面检查它的存在,但它肯定不会保存在那里。也许你在建议更复杂的事情,比如数据是否真的被发送了?这更有趣,因为在我的表单上,需要上传文件。如果真实浏览器上的用户试图跳过它,表单提交将失败,用户将看到一条消息。在IE9中,实际上什么都没有发生。表单提交“成功”,但没有上传/保存文件或错误。我看到IE完全无法与服务器交互,当表单像上传标签一样简单:
    要上传的本地文件:
    您可以尝试简化客户端和服务器端的代码,直到找到罪魁祸首(假设有)。我刚刚在我的服务器上对你的表单做了一个测试,并成功地在IE9中上传了一个文件。这是我使用的代码(PHP):这是我上传的文件:我知道表单可以正确处理提交内容,因为每天有数百名用户使用它,没有任何问题。唯一的问题很少来自IE用户。我在我们的管理员登录页面上多次遇到同样的问题,我已经用IE兼容的元标签解决了这个问题。但我知道在不同版本的IE和Send中呈现出完全不同的效果,也许你的问题与此有关。请参阅我对Onur ab的评论