10

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

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

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

我选择名称以“-files”结尾的所有输入(在我的页面上我还有其他输入类型文件)(我在 Google 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.

谢谢

4

3 回答 3

10

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

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

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

参考:

于 2013-06-11T12:36:30.800 回答
3

你可以使用filterinsted of $.each..

$("input[type='file'][name*='-files']").filter(function(k){
  return $(this).val() === '';
}).length;
于 2013-06-11T12:39:52.333 回答
1

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

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

    });
于 2013-10-17T09:53:26.407 回答