【问题标题】:jQuery Selector for file inputs with at least one file assigned用于文件输入的 jQuery 选择器,至少分配了一个文件
【发布时间】:2020-10-26 03:59:01
【问题描述】:

我有一个包含多个文件输入的页面。这些文件对于最终用户是可选的。我想选择实际分配有文件的输入。我现在的代码是这样的:

HTML

<input type="file" id="file1" value="File 1"/>
<input type="file" id="file2" value="File 2"/>
<input type="file" id="file3" value="File 3"/>

JS

$('input[type="file"]').each(function(){
  if(this.files.length > 0){
    //do something with this file
  }
});

这并不可怕,但我真的很想在选择器本身中加入“files.length>0”。我试过这个:

$('input[type="file"][value!=""]')

但它会选择每个文件输入,而不管是否分配了文件。只选择分配的文件输入有什么神奇的词?

【问题讨论】:

  • 不能由选择器完成,因为文件是属性而不是属性
  • @Mech this.files 是正确的

标签: jquery jquery-selectors


【解决方案1】:

您无法通过选择器访问文件属性

each 之前使用filter() 是一种选择。

$('input[type="file"]').filter(function(){
   return this.files && this.files.length;
}).each(function(){
 // do something with files
});

【讨论】:

  • 坦率地说,这似乎比只在 .each() 中执行 if() 更糟糕,但你确实给了我答案,所以谢谢。
  • 是的,简单的if() 真的很简单
  • 如果你不得不这样做,有一种简单的方法可以编写一个伪选择器,例如 :files,它可以扩展 jQuery 对象并可以在该代码库的任何地方使用
  • 好点@charlieftl。我以前没有出现过这个问题,但如果它再次出现,我会考虑做一个小扩展。
猜你喜欢
  • 2014-12-23
  • 2013-04-25
  • 2021-05-09
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多