Javascript 在div标记中显示多个附加文档名称,并在单击它们时删除单个文档。
我一直在尝试使用JQuery实现这个功能,当使用输入字段上传文件时,我希望添加div标记以及上面的文件名。 这是输入字段的代码:Javascript 在div标记中显示多个附加文档名称,并在单击它们时删除单个文档。,javascript,jquery,html,css,file-upload,Javascript,Jquery,Html,Css,File Upload,我一直在尝试使用JQuery实现这个功能,当使用输入字段上传文件时,我希望添加div标记以及上面的文件名。 这是输入字段的代码: <input id="uploadBtn" type="file" name="uploadBtn" title="Upload Button" multiple> 以下是将div标记添加到其上方屏幕的函数: function handleFileSelect(e) { if(!e.target.files) retur
<input id="uploadBtn" type="file" name="uploadBtn" title="Upload Button" multiple>
以下是将div标记添加到其上方屏幕的函数:
function handleFileSelect(e) {
if(!e.target.files) return;
var data = new FormData();
var files = e.target.files;
for(var i=0; i<files.length; i++) {
var f = files[i];
data.append(f.name,f);
console.log(f.name);
**$('#attachedFiles').append(
'<div class="row"><div class="mdl-textfield mdl-js-textfield justify-space mdl-textfield--file mdl-textfield--file-is-dirty has-placeholder is-upgraded" data-upgraded=",MaterialTextfield"><input class="mdl-textfield__input" placeholder="'+f.name+'" readonly="" type="text" title="Upload File"></input> <div class="mdl-button mdl-button--primary mdl-button--icon mdl-button--file"> <svg role="img" aria-labelledby="remove-attachment1" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> <title id="remove-attachment1">Remove Attachment</title> <path d="M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm6 16.538l-4.592-4.548 4.546-4.587-1.416-1.403-4.545 4.589-4.588-4.543-1.405 1.405 4.593 4.552-4.547 4.592 1.405 1.405 4.555-4.596 4.591 4.55 1.403-1.416z"></path> </svg> <input id="'+uploadFile[i]+ '" data-usage="' + f.name + '" title="Upload Button"> </div> </div> </div>'
);**
}
}
功能手柄文件选择(e){
如果(!e.target.files)返回;
var data=new FormData();
var files=e.target.files;
对于(var i=0;i而言,如果不从页面中看到更多的代码,则很难给出准确的建议。如果在页面加载后向页面添加元素,则以后将无法添加事件侦听器
为了解决这个问题,我会在每个文件中再添加一个类,然后在您的文件容器中添加一个侦听器(我认为您的容器具有id“attachedFiles”):
HTML:
现在,出现在attachedFiles容器中的任何新文件都将侦听单击并执行删除功能。您的代码提供的信息不需要调试
因此,我提供了一种不同的方法来解决您的问题
HTML5文件输入的文件列表是只读的,因此当试图从中删除文件时,您将不被允许
您需要做的是维护一个单独的数组列表(示例中为JSON数组)
我已经用一个div将您的X按钮包装起来,该div将文件索引连接到一个“file”字符串,并添加了一个onclick
函数removeLine(obj)
,该函数接受元素作为对象
我还在全局范围中添加了一个JSON数组finalFiles
,并将inputFile
移动到全局范围
当文件输入发生更改时,我将通过以下方式使用所选文件设置JSON数组:
$.each(this.files,function(idx,elm){
finalFiles[idx]=elm;
});
函数removeLine
将刷新输入文件列表,以允许再次选择相同的文件如果用户错误地删除了文件,该函数将从包装分区id获取文件索引,删除包装分区,然后从JSON数组中删除文件
function removeLine(obj)
{
inputFile.val('');
var jqObj = $(obj);
var container = jqObj.closest('div');
var index = container.attr("id").split('_')[1];
container.remove();
delete finalFiles[index];
//console.log(finalFiles);
}
您可以在表单提交时维护您的文件,并使用FormData通过AJAX post以类似于的方式发送它们
var dropZoneId=“drop zone”;
var buttonId=“单击此处”;
var mouseOverClass=“鼠标悬停”;
var dropZone=$(“#”+dropZoneId);
var inputFile=dropZone.find(“输入”);
var finalFiles={};
$(函数(){
var ooleft=dropZone.offset().left;
var ooright=dropZone.outerWidth()+ooleft;
var ootop=dropZone.offset().top;
var oobottom=dropZone.outerHeight()+ootop;
document.getElementById(dropZoneId).addEventListener(“dragover”,函数(e){
e、 预防默认值();
e、 停止传播();
dropZone.addClass(鼠标覆盖类);
var x=e.pageX;
var y=e.pageY;
如果(!(xooright | | yoobottom)){
inputFile.offset({
顶部:y-15,
左:x-100
});
}否则{
inputFile.offset({
前-400,
左:-400
});
}
},对);
如果(按钮编号!=“”){
变量clickZone=$(“#”+buttonId);
var oleft=clickZone.offset().左;
var oright=clickZone.outerWidth()+oleft;
var otop=clickZone.offset().top;
var obottom=clickZone.outerHeight()+otop;
$(“#”+buttonId).mousemove(函数(e){
var x=e.pageX;
var y=e.pageY;
如果(!(xoright | yobottom)){
inputFile.offset({
顶部:y-15,
左:x-160
});
}否则{
inputFile.offset({
前-400,
左:-400
});
}
});
}
document.getElementById(dropZoneId).addEventListener(“drop”,函数(e){
$(“#”+dropZoneId).removeClass(mouseOverClass);
},对);
inputFile.on('change',函数(e){
最终文件={};
$('#filename').html(“”);
var fileNum=this.files.length,
初始值=0,
计数器=0;
$.each(this.files,function(idx,elm){
最终文件[idx]=elm;
});
用于(初始值;初始值“+计数器+””+此.files[初始值].name+”);
}
});
})
功能删除行(obj)
{
inputFile.val(“”);
var jqObj=$(obj);
var container=jqObj.closest('div');
var index=container.attr(“id”).split(“')[1];
容器。移除();
删除最终文件[索引];
//控制台日志(最终文件);
}
#下降区{
宽度:100%;
最小高度:150px;
边框:3个虚线rgba(0,0,0,3);
边界半径:5px;
字体系列:Arial;
文本对齐:居中;
位置:相对位置;
字体大小:20px;
颜色:#7E7E7E;
}
#下降区输入{
位置:绝对位置;
光标:指针;
左:0px;
顶部:0px;
不透明度:0;
}
/*重要的*/
#鼠标悬停{
边框:3个虚线rgba(0,0,0,3);
颜色:#7E7E7E;
}
/*如果你不想要这个按钮*/
#点击这里{
显示:内联块;
光标:指针;
颜色:白色;
字号:17px;
宽度:150px;
边界半径:4px;
背景色:#4679BD;
填充:10px;
}
#单击此处:悬停{
背景色:#376199;
}
#文件名{
边缘顶部:10px;
边缘底部:10px;
字体大小:14px;
线高:1.5em;
}
.文件预览{
背景:#ccc;
边框:5px实心#fff;
盒子阴影:0.4×rgba(0,0,0,0.5);
显示:内联块;
宽度:60px;
高度:60px;
文本对齐:居中;
字体大小:14px;
边缘顶部:5px;
}
.closeBtn:悬停{
颜色:红色;
显示:内联块;
}
}
把文件放在这里
或者点击这里。。
请检查这行代码。您正在声明输入id不正确。
应该是“uploadFile”+i.对不起,请提供更多信息。例如:removeFun在哪里
$('#attachedFiles').on('click', '.att-file', function() {
// remove function
}
$.each(this.files,function(idx,elm){
finalFiles[idx]=elm;
});
function removeLine(obj)
{
inputFile.val('');
var jqObj = $(obj);
var container = jqObj.closest('div');
var index = container.attr("id").split('_')[1];
container.remove();
delete finalFiles[index];
//console.log(finalFiles);
}
<input id="'+uploadFile[i]+ '" data-usage="' + f.name + '" title="Upload Button">