Javascript 使用标记'修改输入元素的行为;多重';

Javascript 使用标记'修改输入元素的行为;多重';,javascript,html,forms,input,Javascript,Html,Forms,Input,我有一个表单,我希望用户上传多张照片。 通常,当我一次选择多个文件时,效果很好。 但问题是,如果用户希望一个接一个地添加图像,则在每次添加后,会删除上一个文件(因为每次添加后的文件长度为1)。 我该如何解决这个问题?谢谢 $(“#文件”).change(函数(){ log(“文件长度:,$(“#文件”)[0].files.length); }); 您遇到的问题是,标记在这里的行为是“原子性的”。无论你选择什么,你都会选择。如果您希望以后能够添加其他元素,您必须使用插件(如建议的),或者自己处理

我有一个表单,我希望用户上传多张照片。 通常,当我一次选择多个文件时,效果很好。 但问题是,如果用户希望一个接一个地添加图像,则在每次添加后,会删除上一个文件(因为每次添加后的文件长度为1)。 我该如何解决这个问题?谢谢

$(“#文件”).change(函数(){
log(“文件长度:,$(“#文件”)[0].files.length);
});

您遇到的问题是,
标记在这里的行为是“原子性的”。无论你选择什么,你都会选择。如果您希望以后能够添加其他元素,您必须使用插件(如建议的),或者自己处理

let allFiles = [];
$('#files').change(function() {
  this.allFiles = this.allFiles.concat($("#files")[0].files);
  showFileNames();
});
请注意,我是如何将文件“连接”到allFiles变量的

另外,
showFileNames
函数可以呈现所有文件,例如,仅将文件名呈现到表或列表或其他内容中。每个文件都可能有一个“x”来删除它


现在,当您稍后提交表单时,您可以使用
所有文件
而不是直接输入,例如,通过自己构建表单数据。

您遇到的问题是,
标记在这里的作用是“原子性的”。无论你选择什么,你都会选择。如果您希望以后能够添加其他元素,您必须使用插件(如建议的),或者自己处理

let allFiles = [];
$('#files').change(function() {
  this.allFiles = this.allFiles.concat($("#files")[0].files);
  showFileNames();
});
请注意,我是如何将文件“连接”到allFiles变量的

另外,
showFileNames
函数可以呈现所有文件,例如,仅将文件名呈现到表或列表或其他内容中。每个文件都可能有一个“x”来删除它


现在,当您稍后提交表单时,可以使用
allFiles
而不是直接输入,例如,通过自己构建表单数据。

您可以保留一个文件数组,并将每个文件添加到此数组中。这样,您将获得添加的所有文件的运行总数。当前方法的问题是,每次上载时,文件都会被覆盖,因此,将它们保存到数组是解决此问题的一种方法

let allFiles = [];
$('#files').change(function() {
  this.allFiles = this.allFiles.concat($("#files")[0].files);
  showFileNames();
});
请参见下面的工作示例:
让上传的_文件=[];
$(“#文件”).change(函数(){
让currentFiles=$(“#文件”)[0]。文件;
上传的_文件=[…上传的_文件,…当前文件];
console.log(上传的文件长度);
});

您可以保留一个文件数组,并将每个文件添加到此数组中。这样,您将获得添加的所有文件的运行总数。当前方法的问题是,每次上载时,文件都会被覆盖,因此,将它们保存到数组是解决此问题的一种方法

请参见下面的工作示例:
让上传的_文件=[];
$(“#文件”).change(函数(){
让currentFiles=$(“#文件”)[0]。文件;
上传的_文件=[…上传的_文件,…当前文件];
console.log(上传的文件长度);
});


您不能修改默认行为,但可以使用插件(例如,类似于以下内容的东西:(一个需要jQuery,但您可以搜索找到其他不需要的)它以您所描述的方式提供了增强的上传功能。当然,您也可以实现自己版本的概念。您不能修改默认行为,但可以使用插件(例如,类似于以下内容的东西:(一个需要jQuery,但您可以搜索以找到其他不需要的)它以您描述的方式提供增强的上传功能。当然,您也可以实现自己版本的概念。