我将在下面发布我的Javascript。它适用于所有浏览器,但在IE 8或IE 9中完全没有。没有错误,它只是不起作用。我想好消息是我可以准确地告诉它在哪里(见下文),但我不知道为什么或如何解决它。
我的HTML很简单。它只是我正在研究的更大项目的测试页面。我在页面上有一个简单形式的6个文件输入框。我想要做的是获取那些输入字段,丢弃任何空的,并将文件(图片)逐个提交给服务器。我知道有更优雅的方式发送图片,但对于我正在研究的网站,这是最好的方法。
我正在使用随软件提供的服务器端PHP代码。它没有改变。
我会事先承认我是自学成才,Javascript对我来说是一个弱点。我不是白痴,但我是Javascript的新手。
除了IE之外,所有浏览器中的代码都可以正常运行。页面加载,document.ready()代码运行,Fine Uploader DIV放在页面上。当我点击提交按钮时出现问题。我将问题追踪到了
行manualUploader.fineUploader('addFiles', current[0].files[0]);
由于某种原因,运行该行代码会破坏我的脚本,提交继续进行而不处理任何其余代码并完全忽略'return false;'应该阻止提交的声明。据我所知,它没有任何错误。为什么IE会以不同于所有其他浏览器的方式处理该代码?任何帮助,将不胜感激。
$(document).ready(function() {
var numFiles = 0;
var numUploaded = 0;
var manualUploader = $('#sandbox').fineUploader({
request: {
endpoint: '../../Processing/ajax_uploader.php'
},
autoUpload: false,
debug: true,
maxConnections: 1
}).on('complete', function(event, id, name, responseJSON){
numUploaded++;
var tempField = $('#' + 'pic' + (id + 1)).parent();
tempField = tempField.parent();
tempField.remove();
$('#frmNewProperty').append('<input type="hidden" name="hiddenPic' + id + '" value="' + name + '" />');
if (numUploaded == numFiles){
$('form#frmNewProperty').submit();
}
});
$('#subButton').click(function() {
var fields = $('.fileBox');
$.each(fields, function(){
var current = $(this).find('.outgoing');
var dat = current.val();
if (dat != ''){
manualUploader.fineUploader('addFiles', current[0].files[0]);
numFiles++;
}
});
manualUploader.fineUploader('uploadStoredFiles');
return false;
});
});
答案 0 :(得分:1)
您的代码取决于文件API支持。您引用的行要求在input元素的宿主对象上存在files
属性(并且值包含FileList
)。仅当支持File API时才会出现这种情况。 IE9及更早版本不支持File API。对于这些浏览器,您需要将input元素本身传递给addFiles
API函数。
答案 1 :(得分:1)
我看到这个链接几天前恢复了生机,所以我想我会发布一些我必须添加的代码片段,以防万一其他人偶然发现这个帖子并发现它有用。
再次感谢RayNicholus的指针。他已经死了,为我节省了数小时(或几天)研究。
对于IE9及更早版本,您必须替换以下行:
manualUploader.fineUploader('addFiles', current[0].files[0]);
有类似的东西:
manualUploader.fineUploader('addFiles', current);