更好的方法来检查jquery中的某些输入类型文件是否为空?

时间:2013-06-11 12:33:46

标签: javascript jquery

我知道这是一个简单的问题,但我需要有经验的人提出建议。

我有3个输入类型文件,如:

<input type="file" name="1-files" />
<input type="file" name="2-files" />
<input type="file" name="3-files" />

我选择所有输入(在我的页面上我还有其他输入类型文件),其名称以“-files”结尾(我在谷歌Chrome控制台中写道):

$("input[type='file'][name*='-files']").length

确定。我使用1-files输入选择一个文件。之后,我在Google Chrome控制台中运行以下代码:

$("input[type='file'][name*='-files']:empty").length

我希望成为2,但会显示3

你能告诉我为什么吗?

我想获取输入类型文件的所有元素值为空。我在短时间内使用了选择器:empty,但似乎无法正常工作。

当然,我可以使用

var empty_count = 0;
$.each($("input[type='file'][name*='-files']"), function(k, v){
  if($(this).val() === '')
     empty_count++;
});

但我希望在没有$.each的情况下做到这一点的最短路径。

谢谢

3 个答案:

答案 0 :(得分:10)

匹配三个,因为:empty匹配没有后代的元素,并且按定义输入元素不能有后代(因此所有都是空的,因此匹配:empty选择器)。

要查找没有选定文件的元素,我建议:

$("input[type='file'][name*='-files']").filter(function (){
    return !this.value
}).length;

参考文献:

答案 1 :(得分:3)

您可以使用filter代替$.each ..

$("input[type='file'][name*='-files']").filter(function(k){
  return $(this).val() === '';
}).length;

答案 2 :(得分:1)

考虑以下代码,我总是使用它:

     $("input[type='file'][name*='-files']").each(function(){
        if($(this).val().length == 0){
           alert("field is empty");
        }

    });