问题描述
|
我已经制作了一个简单的插件,可以使用隐藏的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;
}