我知道这是一个简单的问题,但我需要有经验的人提出建议。
我有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
的情况下做到这一点的最短路径。
谢谢
答案 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");
}
});