jQuery文件上传在IE中不起作用

问题描述

| 我已经制作了一个简单的插件,可以使用隐藏的iframe上传图片。本质上,它用链接替换文件对话框,单击该链接将触发文件对话框,并在选择文件自动将其上传。 这在Chrome,Safari和Firefox中效果很好。不幸的是,所有IE版本(包括9)都拒绝提交文件文件对话框显示得很好,如果我警告该值,它会显示选定的文件,但是提交事件显然不会触发。如果我选择带有实际文件对话框的文件,那么它将按预期工作,甚至发送文件时也无需单击提交按钮或其他任何东西。 其中只包含相关的执行代码,很显然,其中包含jQuery插件代码等。
                   var self = this;

        var randId = Math.floor(Math.random()*1001);

        var iframeHTML = \'<iframe id=\"iframe\'+randId+\'\" name=\"iframe\'+randId+\'\" style=\"visibility:hidden;height:1px;width:1px;\"></iframe>\';
        var formHTML = \'<form method=\"post\" enctype=\"multipart/form-data\" encoding=\"multipart/form-data\" action=\"\'+settings.action+\'\" target=\"iframe\'+randId+\'\" id=\"form\'+randId+\'\" >\';
        var inputHTML = \'<input type=\"file\" name=\"upload\" id=\"input\'+randId+\'\"><input type=\"submit\" id=\"submit\'+randId+\'\" value=\"Submit\" />\';

        $(this).append(iframeHTML+formHTML+inputHTML+\'</form>\');
        $(\'input#input\'+randId).change(function() {
            if($(this).val() != \'\') {
                if(settings.spinner != \'\') {
                    $(settings.spinner).show(\'fade\');
                }
            }
        $(\'form#form\'+randId).submit();
        });

        $(settings.activator).click(function(e) {
            e.preventDefault();
            $(\'input#input\'+randId).trigger(\'click\');
        });     
settings.activator是用于打开文件对话框的链接。 我需要一些IE专用的东西才能正常工作吗?我知道应该可以这样做,因为其他脚本也可以做到这一点,但是我不太热衷于使用它们,因为出于我的需求,它们大多数都过于庞大且功能丰富。我也不想使用任何基于Flash的解决方案。 编辑:目前,我只是通过在IE中显示文件输入框并使用适当的浏览器来解决此问题。我仍然想听听是否有针对IE的“链接顶部的不透明隐藏输入框”黑客以外的实际解决方案。     

解决方法

        我回想起IE7忽略了表单提交目标隐藏的iframe。尝试将iframe移出视图,而不是实际隐藏它:
.iframe_hidden {
    width: 0;
    height: 0;
    position: relative;
    left: -9999px;
}