2013-03-01 8 views
6

私はWebとSOを検索して、これを多くの異なる方法で自分自身で解決しましたが、成功しませんでした。配列からのファイル拡張子の検証

"outpush.push"ステートメントと同じ方法で、ファイル拡張子が受け入れられるかどうかを示すメッセージを表示したいと思います。

これは、JPG、PNG、GIFなどの受け入れ可能なファイル拡張子のARRAYから取得し、ファイル拡張子が大文字で、それを受け入れる(小文字に変換する)かどうかを検出する必要があります。

ここに私のスクリプトです。スクリプトでどのようにどこでそのような機能を実装できるのだろうと思っていますか?

function handleFileSelect(evt) { 

    var files = evt.target.files; // FileList object 
    var max_size = 5120; // Max file size 

    var output = []; 
    for (var i = 0, f; f = files[i]; i++) { 

     output.push('<li><strong><font size="3" color="FFFFFF">FILE: ', escape(f.name), '</strong> (', f.type || 'n/a', ') - ', 
      f.size, ' bytes, last modified: ', 
      f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a', 
      '</font></li>'); 

     if(f.size > max_size) { 

      output.push('<font size="5" color="FFFF00"><b>ERROR!! Sorry, but the file that you selected is too large. Please upload a file that is no larger than ' + max_size + ' KB.'); 
     } 

     if(f.size < max_size) { 
      output.push('<font size="5" color="FFFF00"><b>FILE SIZE OK. CLICK TO SEND button below.</font>'); 

      output.push('<font size="5" color="FFFFFF"><hr><b>IMPORTANT: Do not close this window. Wait till you see the next page when finished uploading your file.</font>'); 

      document.getElementById("myButton").style.display="all"; 
     } 

    } 

    document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>'; 
} 

document.getElementById('files').addEventListener('change', handleFileSelect, false); 
+0

jQueryのでしょうか?これらはすべて基本的なJavaScriptのようです。 –

+0

あなたはそうです。私は私の質問を編集します。私はそうだと思った。 –

+0

すでに回答がありますが、 'if(f.size> max_size)'と 'if(f.size

答えて

7

を構築するために次のことを考えるかもしれません。

1)あなたが代わりに複数のif文で、if-elseを使用する必要があります。

if (f.size > max_size) { 
    // ... 
} else { 
    // ... 
} 

2)allblockinlineを使用し、displayのための有効な値ではありません。

document.getElementById("myButton").style.display = "block"; 

3)古い<font>タグを使用しています。代わりに、スタイルとCSSを使用します。あなたの場合は、msgのクラスとerrorのクラスとimportantokのクラスを使用します。

4)だけindexOf()を使用して、配列のチェックを行うには:

var extensions = ["jpg", "jpeg", "txt", "png"]; // Globally defined 

... 

// Get extension and make it lowercase 
// This uses a regex replace to remove everything up to 
// and including the last dot 
var extension = f.name.replace(/.*\./, '').toLowerCase(); 

if (extensions.indexOf(extension) < 0) { // Wasn't found 
    output.push('<li class="msg error">ERROR!! Sorry, but the file that you selected is not a valid file type. Valid types are: ', valid, '</li>'); 
} else ... 

デモ:http://jsfiddle.net/jtbowden/L2Gps/

+0

ありがとうございましたJeff、私はとても感謝しています。乾杯 –

2

あなたはこのようなものとして配列を持つことができます。

var file_types = {'jpg', 'png', 'gif'}; 

、その後inArray()についてのあなたのforループ

if ($.inArray(f.ext, file_types) == -1) { 
output.push('<font size="5" color="FFFF00"><b>ERROR!! Incorrect file type! Accepted file types are : jpg, png, gif</b></font>'); 
} 

もっと読書にこのような何かを行います。

+0

他の答えは、バニラのjavascriptに良いです。この回答を参考にしておきます – RenegadeMatrix

0

2つの方法のいずれかを試すことができます。拡張子を取得して、許可された拡張子の配列または正規表現に一致させるかのどちらかを試みます。 jQueryのためとして

var accepted_types = ['jpg', 'gif', 'png']; 
if (accepted_types.indexOf(f.ext) > 0) { 
    output.push(...); 
} 

- あなたはあなたのコードに問題のカップルがありますあなたのHTML

var file_list = $("<ul></ul>"); 
for (var i = 0, f; f = files[i]; i++) { 
    // work goes here, simply append the list elements into file_list 
    file_list.append($("<li>" ... "</li>")); 
} 

// to append your new list to id="list" 
$("#list").append(file_list); 
// or to replace the html with your new html 
$("#list").html(file_list.html()); 
関連する問題