精细上传器在IE以外的每个浏览器中工作

时间:2013-03-25 03:38:16

标签: fine-uploader

我将在下面发布我的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;
    });
});

2 个答案:

答案 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);