IE不支持动态表单上传文件?

时间:2013-02-15 13:17:43

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

如果我在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>

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

1 个答案:

答案 0 :(得分: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中使用,除非你真的需要使用它的多部分方面(例如上传文件),当它会barf时。

     

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

     

form = document.createElement('&lt; form action =“shoppingcart_xhr.php”method =“POST”&gt; enctype =“multipart / form-data”target =“shoppingcart_iframe”&gt;');