javascript - 获取多个多文件输入字段的文件计数

标签 javascript php html

我正在尝试创建一个页面,人们可以一次上传多张照片以制作幻灯片。现在,我已经有了获取多个文件的代码:

<input type="file" name="filesToUpload[]" id="filesToUpload" multiple="multiple" size="20" />

以及计算表单中实际选择了多少张照片的代码:

alert(document.getElementById('filesToUpload').files.length);

问题出在用户实际上想要制作多个幻灯片时。如果是这样,我不能再使用上面的代码,但仍然需要保持输入只有一个名称,以便实际上传文件的 PHP 文件可以保持简单。

如果我确实使用上面的代码,则只会计算第一个文件输入字段。

实际上有没有办法计算具有相同名称的多个文件输入字段?

最佳答案

Is there actually a way to count several fileinput fields with the same ID?

document 中元素的

id 应该是唯一的。将 class 替换为 id

您可以使用 .querySelectorAll(".filesToUpload") 到每个 ".filesToUpload" 元素的 NodeList,将结果传递给Array.from()NodeList 创建一个数组,迭代该数组并返回一个对象,其中元素在 NodeList 中的索引和.files .length 是返回对象的属性。

您还可以使用.reduce().map()返回的数组中获取上传文件的总数。

<form>
  <input type="file" name="filesToUpload[]" class="filesToUpload" multiple="multiple" size="20" />
  <input type="file" name="filesToUpload[]" class="filesToUpload" multiple="multiple" size="20" />
  <input type="file" name="filesToUpload[]" class="filesToUpload" multiple="multiple" size="20" /><br><br>
  <input type="submit">
</form>
<script>
  const inputs = Array.from(document.querySelectorAll(".filesToUpload"));
  const form = document.forms[0];
  form.onsubmit = function(e) {
    e.preventDefault();
    
    let fileIndexes = inputs.map(function(input, index) {
      return {files: input.files.length, filesToUploadIndex: index}
    });
    
    let filesTotal = {filesTotal:fileIndexes.reduce(function(a, b) {
      return a + b.files
    }, 0)};
    
    console.log(fileIndexes, filesTotal)
  }
</script>

关于javascript - 获取多个多文件输入字段的文件计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45652581/

相关文章:

javascript - Firebase 版本 3 中的 changePassword() 方法

javascript - 在 React 中重置组件的状态

php循环遍历json数组

php - Laravel @extends 和 @include

javascript - jQuery UI .position() 错过了使用 jQuery .height() 设置的目标元素的高度

javascript - 如何在响应模式下反转元素的顺序

html - 固定的 div 将其他 div 隐藏在它下面

javascript - div元素换位后效果

javascript - Bootstrap 可扩展侧边栏元素

php - 如何使用信用卡配置 Paypal 付款