当我尝试通过动态输入字段上传多个文件时,Internet Explorer 7和8出现问题。对于dynamic,我的意思是用户可以点击"添加"按钮,该按钮运行一些JavaScript来创建一个新的文件输入字段。因此,它们最终如下所示:
<input type="file" name="uploads[0]"/>
<input type="file" name="uploads[1]"/>
<input type="file" name="uploads[2]"/>
它可以与Firefox、Chrome和Internet Explorer 9配合使用,但在Internet Explorer 7和8中,我在服务器端的Struts2中遇到了转换错误。我的方法需要一个文件列表,但我收到一个带有文件路径的字符串。
这是怎么造成的,我该如何解决?
鉴于创建表单元素的JavaScript代码在IE6/7/8中中断,这只能意味着您(间接)使用document.cloneNode()
来创建新的输入元素。你不应该那样做。由于一个错误,IE6/7/8不允许您更改name
属性,它将保持与原始源元素相同。
您应该使用document.createElement()
来创建全新的元素。这反过来也有一个IE6/7(而不是8!)特定的错误。您不能通过setAttribute()
设置name
属性,而是需要像这样在createElement()
函数中直接指定它
document.createElement('<input name="uploads[' + index + ']">');
另请参阅:
- 无法使用.cloneNode克隆IE中的表单元素
- createElement在IE中损坏