我正在使用AJAX上传。由于IE没有所需的对象,我将不得不使用iframe进行解决。
从理论上讲,这很简单:
此外,由于输入文件字段很糟糕,最好有一个“上传”按钮触发隐藏输入文件字段的单击事件以打开文件选择对话框。
是的,这就是理论。实际上,情况更糟。首先,IE8不知何故不喜欢克隆的iframe,因此我们必须随意添加每个iframe。然后,尝试提交时,文件输入字段将被清除。我弄清楚发生了什么以及什么时候发生,而且非常难看。
前往this example并且效果非常好。表单被克隆,文件字段包含数据并提交表单。但是,文件输入没有name属性,我无法在服务器端访问它 所以我添加了属性here's the example,这就是:文件字段被清除。只是因为name属性。
这可能是一个愚蠢的问题,但有一个解决方法吗?我很清楚,如果文件输入字段被选中,它可以触发自动上传,但我想知道我是否可以不需要实际点击文件字段,就像在每个理智的浏览器中一样。
感谢。
答案 0 :(得分:2)
你必须在IE中点击输入文件(可能是安全的),而不是点击其他按钮来触发点击事件。
<script>
$(function() {
var uploadFile = $('#uploadFile');
var txtUploadFile = $('#txtUploadFile');
var btnUploadFile = $('#btnUploadFile');
uploadFile.css('position', 'absolute')
.css('opacity', '0')
.width(30);
uploadFile.change(function() {
txtUploadFile.val(this.value);
});
btnUploadFile.mousemove(function(e) {
uploadFile.css('top', btnUploadFile.offset().top)
.css('left', e.pageX - uploadFile.width() / 2);
});
});
<body>
<form target="hiddenIframe" action="your_upload_site" method="post" enctype="multipart/form-data">
<input id="txtUploadFile">
<input id="btnUploadFile" type="button" value="Select">
<input id="uploadFile" name="uploadFile" type="file" />
<input type="submit" value="Upload">
</form>
<iframe name="hiddenIframe" style="display: none;"></iframe>
答案 1 :(得分:0)
有点晚了,但我今天遇到了同样的问题,可以解决它。 使用带有指向文件输入的for属性的标签。
你的HTML看起来像这样:
<label for=foo>Upload<label>
<form>
<input type=file id=foo>
<input type=submit>
</form>
在标签的click-Event中,您只需创建iframe。 然后你在文件输入上有一个onchange-Listener来触发表单提交。 我的用例有点不同,所以我不是100%确定这是否也适合你,但我认为应该。
答案 2 :(得分:-1)
input[type=file]
的name属性是只读的。根据{{3}}:
Windows Internet Explorer 8及更高版本。选择文件时 使用input type = file对象,value属性的值 取决于“包含本地目录路径时的值” 将文件上载到服务器“安全区域的安全设置 用于显示包含输入对象的网页。
仅返回所选文件的完全限定文件名 启用此设置时。禁用该设置时,Internet Explorer 8用字符串替换本地驱动器和目录路径 C:\ fakepath \以防止不恰当的信息泄露。
为了说明,假设您尝试上传名为的文件 C:\ Users \用户CONTOSO \文件\ file.txt的。当你这样做时,值 value属性设置为c:\ fakepath \ file.txt。
编辑:我无法确定这是否是问题,因为您的问题对于您要完成的工作有点模糊。