2

入力ボタンを使用してユーザー コンピューター上のファイルを参照すると、FF、IE9、および Chrome で動作します。しかし、IE9 で JS 関数にファイルを渡すと、未定義になりますが、FF と Chrome では完全に動作します。

 <form id="uploadForm" style='display:none;padding:1px;' method="post" enctype="multipart/form-data">
 <input type="file" name="data" id="inFile" size="15" style="display:none" onchange="handleFiles(this.files)"/>


function handleFiles(files){
//doing something with the files
}



 //In IE files is undefined

私も使ってみました

    dojo.connect(dojo.byId("uploadForm").data, "onchange", function(evt){
        handleFiles(this.files);
    });

<form id="uploadForm" method="post" enctype="multipart/form-data">
<input type="file" name="data" id="inFile" size="15" style="display:none"/>

This.files は再び undefined になります

ありがとう

4

2 に答える 2

6

IE9 は複数ファイルのアップロードをサポートしておらず、filesプロパティもありません。プロパティに依存しvalue、それが提供するパスからファイル名を解析する必要があります。

私の解決策:

  1. 関数に渡すthis代わりthis.fileshandleFiles():

    <input type="file" onchange="handleFiles(this)">
    
  2. handleFiles()次のように関数を開始します。

    function handleFiles(input){
        var files = input.files;
        if (!files) {
            // workaround for IE9
            files = [];            
            files.push({
                name: input.value.substring(input.value.lastIndexOf("\\")+1),
                size: 0,  // it's not possible to get file size w/o flash or so
                type: input.value.substring(input.value.lastIndexOf(".")+1)
            });
        }
    
        // do whatever you need to with the `files` variable
        console.log(files);
    }
    

jsFiddle で実際の例を参照してください: http://jsfiddle.net/phusick/fkY4k/

于 2012-08-19T21:24:55.870 に答える
0

明らかに、ファイルは IE で定義されていません。IE での方法については、こちらを参照してください。

于 2012-08-19T19:04:55.723 に答える