【问题标题】:IE doesn't support file upload in a dynamic form?IE 不支持以动态形式上传文件?
【发布时间】:2013-02-15 13:17:42
【问题描述】:

如果我像这样在 HTML 中明确写出一个表单:

 <form action='upload_1-img.php' enctype='multipart/form-data' method='post'>
   <input type='file' id='image' name='image'><input type='submit'>
 </form>

然后在 IE 中一切都按预期进行。 但如果我执行以下操作,它在 Chrome 和 FF 中有效,但在 IE8 中无效:

<html>
<head>
<script>
$(document).ready(function(){

    imgform = document.createElement('form');
    imgform.id = 'imgform';
    imgform.method='post';
    imgform.enctype='multipart/form-data';
    imgform.action ='upload_1-img.php';
    $('body').append(imgform);
    $('#imgform').append("<input type='file' id='image' name='image' /><input type=submit>");
});
</script>
</head>
<body>
</body>
</html>

在这种情况下,如果我在upload_1-img.php 中使用var_dump($_FILES),它会返回一个空数组。当相同的表单在 HTML 中显式编码时,IE8 会正常上传文件。但是我需要在 javascript 中动态创建表单后上传文件才能工作。在 IE8 中进行这项工作的解决方法是什么?

【问题讨论】:

  • 出于兴趣,当您使用 jQuery 时,为什么要使用 document.createElement 作为 form 元素?您不能按照您已经为 &lt;input&gt; 元素编写的方式编写整个 &lt;form&gt;....&lt;/form&gt; 块吗?
  • 正如 SDC 所说,jquery 会解决您的问题。但是,我怀疑imgform.enctype='multipart/form-data'; 实际上是您的问题。尝试使用imgform.setAttribute

标签: javascript forms internet-explorer file-upload internet-explorer-8


【解决方案1】:

尝试做这样的事情:

var form=document.createElement("<form id='imgform' action='upload_1-img.php' enctype='multipart/form-data' method='post'>");
$('body').append(form);
$('#imgform').append("<input type='file' id='image' name='image' /><input type=submit>");

来源:http://verens.com/2005/07/06/ie-bugs-dynamically-creating-form-elements/

如果您检查文章的底部,则说明

上面的代码大部分都可以在 IE 中运行,除非你确实需要使用它的 multipart 方面(例如上传文件),否则它会出错。

在这种情况下,IE似乎坚持使用以下糟糕的代码:

form=document.createElement('

enctype="multipart/form-data" target="shoppingcart_iframe">');

【讨论】:

  • 太棒了!除了现在它在 FF 和 Chrome 中崩溃!我想在这种情况下我只需要浏览器条件代码?
猜你喜欢
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多