尝试在IE8上提交时,文件输入被清除

时间:2011-07-15 18:50:59

标签: jquery internet-explorer-8 file-io

我正在使用AJAX上传。由于IE没有所需的对象,我将不得不使用iframe进行解决。

从理论上讲,这很简单:

  1. 创建表单和iframe
  2. 更改表单的目标和iframe的名称属性
  3. 当输入文件字段更改时,将提交表单
  4. 此外,由于输入文件字段很糟糕,最好有一个“上传”按钮触发隐藏输入文件字段的单击事件以打开文件选择对话框。

    是的,这就是理论。实际上,情况更糟。首先,IE8不知何故不喜欢克隆的iframe,因此我们必须随意添加每个iframe。然后,尝试提交时,文件输入字段将被清除。

    我弄清楚发生了什么以及什么时候发生,而且非常难看。

    前往this example并且效果非常好。表单被克隆,文件字段包含数据并提交表单。但是,文件输入没有name属性,我无法在服务器端访问它 所以我添加了属性here's the example,这就是:文件字段被清除。只是因为name属性。

    这可能是一个愚蠢的问题,但有一个解决方法吗?我很清楚,如果文件输入字段被选中,它可以触发自动上传,但我想知道我是否可以不需要实际点击文件字段,就像在每个理智的浏览器中一样。

    感谢。

3 个答案:

答案 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。

编辑:我无法确定这是否是问题,因为您的问题对于您要完成的工作有点模糊。