19

欢迎收看“为什么 Internet Explorer 如此糟糕?”的第 32,342,343 集。...

我看到很多报告说 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>s 然后像这样结束:

    ....
    <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。

4

5 回答 5

2

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

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

但是,当表单确实提交时,这可能会导致重复提交,所以要小心。

于 2013-07-19T23:51:04.657 回答
0

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

请参阅此问题以获取可能的值:<meta http-equiv="X-UA-Compatible" content="IE=edge"> 做什么?

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

于 2013-04-02T17:12:21.327 回答
0

好的,我宁愿发表评论而不是答案,但我还没有要点!

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

  2. 从上面继续.. 在服务器端,您如何检查空字段?我更多的是在这里你经常寻找“”的 JS 行,null 和 undefined 我只是在想,也许怪癖模式正在发送一些模糊数据,你的服务器端错误检查丢失了,因为你没有看对于它,因此报告一切正常。

于 2014-01-25T23:50:09.487 回答
0

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

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

或者您也可以使用 IE 的元兼容标签来呈现页面,如 IE8

<meta http-equiv="X-UA-Compatible" content="IE=8" />
于 2013-04-02T07:35:36.903 回答
0

正如 Graham 所做的那样,我认为这可能更多是服务器问题 - 而且我从来没有遇到过 IE9(或更高版本)中的文件上传问题 - 我猜你不想发布处理上传的 PHP 脚本的代码?

于 2013-04-02T03:20:34.027 回答