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

时间:2013-03-24 13:20:25

标签: forms internet-explorer file-upload cross-browser internet-explorer-9

欢迎来到的第32,342,343集“为什么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>
        ...

它继续这样下去,再加上几个<fieldset>,然后这样结束:

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

更新 我很高兴所有从未遇到过这个问题的人,但这不仅仅是我: http://answers.microsoft.com/en-us/ie/forum/ie9-windows_vista/cannot-upload-files-using-internet-explorer-9/5724d921-ae71-e011-8dfc-68b599b31bf5

UPDATE2 我看到很多建议添加一个元标记来强制用户代理到IE8 ...... <meta http-equiv="X-UA-Compatible" content="IE=8" /> 我不想这样做,因为虽然我支持IE8,但我网站上的许多元素在IE8和IE9中的呈现方式不同。这将创建一个相当草率的用户体验,因为任何IE用户都会在该特定页面上遇到我临时“时间扭曲”回到IE8。

5 个答案:

答案 0 :(得分:2)

我能够通过在setTimeout中包装jQuery表单提交来修复这个问题的噩梦:

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

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

答案 1 :(得分:0)

正如格雷厄姆所做的那样,我认为这可能更像是一个服务器问题 - 我在IE9(或更新版本)中从未遇到过fileuploads的问题 - 我想你不想发布处理PHP脚本的代码上传?

答案 2 :(得分:0)

如果没有发送任何数据,您可以通过服务器端脚本上的隐藏输入检查发布数据。例如,如果你使用的是php,那就像

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

或者你也可以使用IE的元兼容标签来呈现像IE8

这样的页面
<meta http-equiv="X-UA-Compatible" content="IE=8" />

答案 3 :(得分:0)

我建议设置X-UA-Compatible元标记值并查看是否有任何区别。

有关可能的值,请参阅此问题:What does <meta http-equiv="X-UA-Compatible" content="IE=edge"> do?

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

答案 4 :(得分:0)

好的,我宁愿留下评论而非答案,但我还没有得分!

  1. 用户是否处于怪异模式?大多数IE用户都不知道怪癖模式,并且在尝试刷新页面时可能不小心点击了它(而不是按F5)。如果是间歇性的,这可能是原因。

  2. 从上面开始..在服务器端,你如何检查空字段?我更喜欢这里的JS,你经常寻找“”,null和undefined我只是觉得怪癖模式可能会发送一些模糊数据,导致服务器端错误检查丢失,因为你不看对于它,因此报告一切正常。