2

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

2 回答 2

1

我看到这个链接几天前又恢复了生命,所以我想我会发布我必须添加的一小段代码,以防万一其他人偶然发现这个线程并发现它有帮助。

再次感谢 RayNicholus 的指点。他死心塌地,为我节省了数小时(或最有可能数天)的研究时间。

对于 IE9 及更早版本,您必须替换以下行:

manualUploader.fineUploader('addFiles', current[0].files[0]);

有类似的东西:

manualUploader.fineUploader('addFiles', current);
于 2013-05-31T23:43:51.387 回答
1

您的代码取决于文件 API 支持。您引用的行期望输入元素的宿主对象上files存在一个属性(并包含FileList一个值)。仅当支持 File API 时才适用。IE9 及更早版本不支持文件 API。对于这些浏览器,您需要将输入元素本身传递给addFilesAPI 函数。

于 2013-03-25T03:41:25.680 回答