2016-12-05 12 views
0

問題は、無効なファイル拡張子と無効なファイルサイズをアップロードしたときです。それは、無効なファイルタイプとファイルサイズを警告するのではなく、2つの条件を満たす最初のファイルが何であるかによって警告します。Jquery条件が機能しない

たとえば、example.phpをアップロードし、2048を超える別のファイルをアップロードすると、無効なファイルタイプが警告されます。その後、その逆。

example.phpをアップロードし、2048を超えるファイルをアップロードした場合、出力が無効なファイルタイプとファイルサイズである必要があります。

var fileextension = new RegExp("(.*?)\.(csv|doc|docx|gif|jpeg|jpg|pdf|png|ppt|pptx|txt|xls|xlxs|zip|mp3|mp4)$"); 
$('input[type=file]').change(function() { 
var val = $(this).val().toLowerCase(); 

for(var i=0; i<this.files.length; i++){ 
    var filename = this.files[i].name.toLowerCase(); 
    var fsize = this.files[i].size, 
     fsize = fsize/1024; // 1024 = 1mb 
     if(fsize > 2048){ 
      $(this).val(''); 
      swal('Opps','Invalid file size','warning'); 
     }else if(!fileextension.test(filename)){ 
      $(this).val(''); 
      swal('Opps','Invalid file type','warning'); 
     }else if(!fileextension.test(filename) && fsize > 2048){ 
      $(this).val(''); 
      swal('Opps','Invalid file type and file size','warning'); 
     } 
} 

答えて

1

たとえば、 message、このようなあなたのifブロック変更:

if (message) { // Checks if there is something in `message` 
    $(this).val(''); 
    swal('Opps',message,'warning'); 
} 

編集:ここでは は(フィドルに記載されている)、更新の答えである、あなたは、このようなswalを呼び出すことができます

var message = ""; 

if(fsize > 2048){ 
    message += "Invalid file size"; 
} 

if(!fileextension.test(filename)) { 
    message += message === "" ? "Invalid" : " and"; 
    message += " file type"; 
} 

を:

var fileextension = new RegExp("(.*?)\.(csv|doc|docx|gif|jpeg|jpg|pdf|png|ppt|pptx|txt|xls|xlxs|zip|mp3|mp4)$"); 

$('input[type=file]').change(function() { 
    var val = $(this).val().toLowerCase(), 
    invalidType = false, 
    invalidSize = false; 

    for (var i = 0; i < this.files.length; i++) { 
    var filename = this.files[i].name.toLowerCase(); 
    var fsize = this.files[i].size, 
     fsize = fsize/1024; // 1024 = 1mb 

    if (fsize > 2048) { 
     invalidSize = true; 
    } 

    if (!fileextension.test(filename)) { 
     invalidType = true; 
    } 
    } 

    var message = ""; 

    if (invalidType) { 
    message += "Invalid type"; 
    } 

    if (invalidSize) { 
    message += (message === "" ? "" : " and") + " size"; 
    } 

    if (message) { 
    swal('Opps', message, 'warning'); 
    } 

}); 
+0

私はPHPファイルと2048以上のファイルをアップロードし、まだそれは正しいエラーを表示しませんここに私のコードですhttps://jsfiddle.net/ga9ht53/6/ – erinr

+0

まあ、本当にそれを理解することはできませんあなたが与えたリンクを開こうとしましたが、それは私のために完全に働いています。もう一度確認できますか? – 31piy

+0

atleast 1つの有効なファイル拡張子をアップロードすると、それは完全に動作し、他のファイルは、ファイルサイズが2048より大きいとすると、無効なファイルサイズを警告します。およびその逆。しかし、.phpファイルや有効なファイルのような無効なファイル拡張子を2048以上のサイズでアップロードした場合は、「無効なファイルタイプとファイルサイズ」という警告は表示されません。 – erinr

0

何が起こるのですがtrueに評価された最初のif条件が実行されますということです、そしてプログラムが残りを評価しません:

は、ここに私のコードです。あなたの場合、これはあなたのif elseループの最後の状態にアクセスできなくなります。あなたがあなたの最後の条件が最初に評価されるようにしたい場合は、それを上に移動 - このような何か:

var fileextension = new RegExp("(.*?)\.(csv|doc|docx|gif|jpeg|jpg|pdf|png|ppt|pptx|txt|xls|xlxs|zip|mp3|mp4)$"); 
$('input[type=file]').change(function() { 
var val = $(this).val().toLowerCase(); 

for(var i=0; i<this.files.length; i++){ 
    var filename = this.files[i].name.toLowerCase(); 
    var fsize = this.files[i].size, 
     fsize = fsize/1024; // 1024 = 1mb 
     if(!fileextension.test(filename) && fsize > 2048){ 
      $(this).val(''); 
      swal('Opps','Invalid file type and file size','warning'); 
     } 
     else if(fsize > 2048){ 
      $(this).val(''); 
      swal('Opps','Invalid file size','warning'); 
     } 
     else if(!fileextension.test(filename)){ 
      $(this).val(''); 
      swal('Opps','Invalid file type','warning'); 
     } 
} 

編集を - あなたはあなたの出力はグループとして、すべてのファイルの状態に基づくようにしたい場合は、個々のファイルではなく、明らかにループ内で出力を処理することはできません。あなたはこのような何かをする必要があります:

var fileextension = new RegExp("(.*?)\.(csv|doc|docx|gif|jpeg|jpg|pdf|png|ppt|pptx|txt|xls|xlxs|zip|mp3|mp4)$"); 
$('input[type=file]').change(function() { 
var val = $(this).val().toLowerCase(); 

var sizeError=false; 
var extensionError=false; 

for(var i=0; i<this.files.length; i++){ 
    var filename = this.files[i].name.toLowerCase(); 
    var fsize = this.files[i].size, 
     fsize = fsize/1024; // 1024 = 1mb 
     if(fsize > 2048){ 
      sizeError=true; 
     } 
     if(!fileextension.test(filename)){ 
      extensionError=true; 
     } 
} 

今すぐ出力をチェックし、処理するforループの外でこれらのブール値extensionErrorsizeErrorを使用しています。

+0

私はすでにそれを試みており、出力は無効なファイルサイズです。私の配列に渡す最初の値は2048より大きく、配列に渡される2番目の値は無効なファイルタイプです。 – erinr

+0

私は編集したものを試しましたが、それでもエラーが出ませんでした。ここにコードhttps://jsfiddle.net/y3q29ocp/5/があります。また、私がアップロードしたファイルをアップロードしようとしたときに私はencouteredしました。他のコードと違ってここで検証しません。jsfiddle.net/ga9ht53e/6 – erinr

関連する問題