2

以下にJavascriptを投稿します。すべてのブラウザで完全に機能しますが、IE8またはIE9ではまったく機能しません。エラーは発生しません。機能しません。良いニュースは、それがどこで壊れているかを正確に知ることができるということだと思いますが(以下を参照)、それを修正する理由や方法がわかりません。

私のHTMLは単純です。これは、私が取り組んでいるはるかに大きなプロジェクトのテストページにすぎません。ページ上にシンプルな形式の6つのファイル入力ボックスがあります。私がやろうとしているのは、これらの入力フィールドを取得し、空のフィールドを破棄して、ファイル(画像)を1つずつサーバーに送信することです。写真を送信するためのよりエレガントな方法があることを私は知っていますが、私が取り組んでいるサイトにとって、これはそれを行うための最良の方法です。

ソフトウェアに付属のサーバー側のPHPコードを使用しています。変更はありません。

私は独学であり、Javascriptは私にとって弱点であることを前もって認めます。私はばかではありませんが、Javascriptは初めてです。

このコードは、IEを除くすべてのブラウザーで問題なく機能します。ページが読み込まれ、document.ready()コードが実行され、FineUploaderDIVがページに配置されます。送信ボタンを押すと問題が発生します。問題を追跡しました

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

何らかの理由でそのコード行を実行するとスクリプトが壊れ、送信は残りのコードを処理せずに続行され、「returnfalse;」を完全に無視します。提出を妨げるべき声明。私の知る限り、エラーは発生しません。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

コードはファイルAPIのサポートに依存しています。参照した行は、入力要素のホストオブジェクトにfilesプロパティが存在する(および値のを含む)ことを想定しています。FileListこれは、ファイルAPIがサポートされている場合にのみ当てはまります。IE9以前はFileAPIをサポートしていません。addFilesこれらのブラウザの場合、入力要素自体をAPI関数に渡す必要があります。

于 2013-03-25T03:41:25.680 に答える
1

このリンクが数日前に復活したので、他の誰かがこのスレッドに遭遇して役立つと思った場合に備えて、追加する必要のあるコードの小さなスニペットを投稿すると思いました。

ポインタを提供してくれたRayNicholusに再度感謝します。彼は真面目で、私に数時間(またはおそらく数日)の研究を節約してくれました。

IE9以前の場合は、次の行を置き換える必要があります。

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

次のようなもので:

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