今天想写一个动态增加type=file控件,然后上传文件的功能,但是IE浏览器一切正常,但是谷歌浏览器只能获取到一个文件信息!代码如下
<form action="upload.class.php" runat="server" method="post" enctype="multipart/form-data">
<span><input type="file" name="file[]" id="aa" /></span>
<span class="add_pic" onclick="addinput(this);">[增加图片]</span>
<input type="submit" value="test" />
JS代码
function addinput(obj)//增加input节点
{
var input=document.createElement('input');
var br=document.createElement('br');
input.id='aa';
input.type='file';
input.name='file[]';
obj.parentNode.appendChild(br);
obj.parentNode.appendChild(input);
}
别看JS代码,JS代码是无措的,正常执行,为了方便 表格HTML代码删除了一部分
PHP
<?php
$file = $_FILES['file'];
echo "<pre>";
print_r($file);
echo "</pre>";
谷歌浏览器
Array
(
[name] => Array
(
[0] => 新建文本文档.txt
)
[type] => Array
(
[0] => text/plain
)
[tmp_name] => Array
(
[0] => C:\wamp\tmp\php544A.tmp
)
[error] => Array
(
[0] => 0
)
[size] => Array
(
[0] => 311
)
)
只获取到了一个一个文件的数据,动态增加的控件选中的图片获取不到,求教,如何解决这个问题?而IE浏览器则两个上传的文件数据都获取到了,谷歌却动态增加的图片上传控件的文件获取不到!望高手赐教!
具体的原理我也不知道为什么谷歌不支持数组形式的name
那么既然谷歌不支持,你就把name给换一下吧!
你可以给js设置一个全局变量,如果点击增加了,就让变量加1,然后赋值给file的name
这样name就不会重复了,你PHP页面只需要循环$_FILES就可以了!追问
1 你测试的谷歌也是接受不到$FILE的数组吗?
2 我按你的方法,给动态生成的file控件动态增加name,发现还是接收不到,发现问题还是谷歌接收不到动态生成的file控件
你好,问题解决了!现在贴出来解决方法:
是form和table的嵌套问题,把form写到table外面就行!
额……你把form写到table里面了……
你的input id是相同的 会导致js 出错的追问
id 不一样 也会出现这种问题~~~ 你说的这个不是问题的实质,问题是 谷歌浏览器接受不到动态创建的input type=file的值,而IE则没有问题,正常接收
追答runat="server"
为啥要用呢..
你用firebug 调试下 看看有没有post值过去