2012-02-07 70 views
0
var $imagefile = $('<input />') 
    .attr({ 
     type: 'file', 
     name: 'imageFile', 
     id: 'imageFile' 
    }); 

上面是我创建文件输入的代码。如何在文件输入为空时不显示警报?

下面是一个检查,如果文件格式是一个表行正确的代码:

function validation() { 

    var marks = parseInt($("#total-weight").text());  
    var _qid = ""; 
    var _msg = ""; 


    var allowedTypes = ["jpg", "jpeg", "gif", "png"]; 

    var path = $("#imageFile").val(); 
    var ext = path.substring(path.lastIndexOf('.') + 1).toLowerCase(); 

    var alertValidation = ""; 
    // Note, this is just so it's declared... 
    $("tr.optionAndAnswer").each(function() { 


     _qid = $("td.qid",this).text(); 
     _msg = "You have errors on Question Number: " + _qid + "\n"; 


     $("#imageFile",this).each(function() { 

      if ($.inArray(ext, allowedTypes) < 0) { 
       alertValidation += '\n\u2022 Unsupported file type'; 
      } 

      if (alertValidation != "") { 
       return false; //Stop the each loop 
      } 
     }); 

     if(alertValidation != ""){ 
      return false; 
     } 
    }); 


    if (alertValidation != "") { 
     alert(_msg + alertValidation); 
     return false; 
    } 

    return true; 
} 

现在这工作正常通过识别文件类型是正确和不正确。问题是,如果在所有表格行中用户不选择一个文件,那么它提出的警告是不正确的。

我怎样才能得到它,以便它也允许用户不选择文件的空白文件输入?

回答

1

,在该例程

$("#imageFile",this).each(function() { 

     if ($.inArray(ext, allowedTypes) < 0) { 
      alertValidation += '\n\u2022 Unsupported file type'; 
     } 

     if (alertValidation != "") { 
      return false; //Stop the each loop 
     } 
    }); 

您应该检查,看它是否有一个值,如果是的话,继续处理。事情是这样的:

$("#imageFile",this).each(function() { 
    if($(this).val().length) { 
     // continue on 
    } 
}); 

我们的意见后,你或许应该使用一类选择,而不是一个id选择。所以,你创建代码也许应该是这样的:

var $imagefile = $('<input />') 
.attr({ 
    type: 'file', 
    name: 'imageFile', 
    class: 'imageFile' 
}); 

而且你的日常应该是:

$(".imageFile",this).each(... 

这样,你可以迭代在集合。

+0

嗨,只是一个小问题,如果我有两个表行都有一个文件输入,如果我选择第一行的位图文件和第二行的PNG,它实际上不应该显示警报显示第一行的警报,因为它是一个位图,为什么它不显示警报消息呢? – user1182476 2012-02-07 01:41:15

+0

我认为它可能与你使用文件类型选择器的'id'属性有关。每页只能有一个'id',如果你有多个id,后续的'id'会替换DOM中的前一个。所以在你的例子中,第二个文件类型输入**具有**有效的文件类型 - 因此没有警报。这有帮助吗? – daniel0mullins 2012-02-07 02:03:04

+0

我已将#imageFile更改为.imageFile,但仍然是同样的问题。如果第一行是位图,第二行是png,它会显示错误,但是如果它是其他方式,它不显示错误? – user1182476 2012-02-07 02:12:50