如何更改已上载文件的列表
How do I change the list of uploaded files?
我正在尝试使用XMLHttpRequest将文件上传到服务器。以下是我希望代码执行的步骤:
- 在文件列表ul中列出文件
- 在显示进度条的同时上载文件
- 文件完全上载后,将该文件的列表项更改为不带进度条的链接。这就是我的问题所在
这是我正在使用的HTML代码:
<h1>Upload Files</h1>
<input type='file' name='doc_upload_field[][]' multiple='multiple' id='doc_upload_field' />
<ul id='filelist'></ul>
以下是我正在使用的javascript代码:
function transferFailed(evt) {
alert("An error occurred while transferring the file.");
}
function transferCanceled(evt) {
alert("The transfer has been canceled by the user.");
}
var filelist = $('#filelist');//define where the list of files will go
var url = "/";
function handleFileSelect_inputfield(evt) {
var files = evt.target.files; // FileList object
// run through each file individually.
for (var i = 0, f; f = files[i]; i++) {
var li = $("<li><strong>" + f.name + "</strong> (" + f.type +") - " + f.size + " bytes <div class='progress_bar'><div class='percent'> </div></div></li>");
filelist.append(li);//put the file in the filelist
var formData = new FormData();
formData.append(f.name, f);
//upload through xmlhttprequest
var xhr = new XMLHttpRequest();
xhr.upload.li = li;
xhr.upload.addEventListener("progress", function(e) {
if (e.lengthComputable) {
var percentLoaded = Math.round((e.loaded / e.total) * 100);
// Increase the progress bar length.
if (percentLoaded < 100) {
this.li.find(".progress_bar").addClass('loading');
this.li.find(".percent").width(percentLoaded + '%');
}
}
}, false);
xhr.upload.addEventListener("load", function(e) {
//uploading is complete
}, false);
xhr.upload.addEventListener("error", transferFailed, false);
xhr.upload.addEventListener("abort", transferCanceled, false);
xhr.open('POST', url, true);
xhr.responseType = 'text';
xhr.onload = function(e) {
if (this.readyState==4){
if (this.status == 200) {
//console.log(this.response);
console.log("finished=" + li);//returns as an object
//console.log("filename=" + f.name);//error: cannot read property 'name' of undefined
//change the list item. Not working...
this.li.find("li").html("<a href='#'>" + f.name + "</a>");
}
}
};
xhr.send(formData); // multipart/form-data
}
}
document.getElementById('doc_upload_field').addEventListener('change', handleFileSelect_inputfield, false);
一切似乎都在工作,但当我想更改列表项时,李,它无法识别它。我可以通过调用来更改进度条长度
this.li.find(".progress_bar").addClass('loading');
this.li.find(".percent").width(percentLoaded + '%');
但当我想更改列表项时:
this.li.find("li").html("<a href='#'>" + f.name + "</a>");
它不起作用。
有人知道为什么它在更改进度条时会找到它,但在上传后却找不到它吗?
表达式
this.li.find("li")
在另一个<li>
元素内查找一个<li>
元素。没有,所以什么也没发生。
我认为
this.li.html("<a href='#'>" + f.name + "</a>");
应该是你想要的或者你可以这样做:
this.li = $("<li><a href='#'>" + f.name + "</a></li>");
edit哦,不,这不起作用,因为你已经把它卡在DOM中了。但第一个应该有效。
编辑—您还遇到了一个与闭包相关的问题(或与范围相关的问题;随便怎样(。你能做的事情就像你已经为"li"值做的一样。将它的另一个属性添加到"xhr.upload":
xhr.upload.updated_li = "<a href='#'>" + f.name + "</a>";
在您设置"xhr.updated.li"的地方执行此操作。然后,在事件处理程序中,您可以执行:
this.li.html(this.updated_li);
相关文章:
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 根据手机上是否存在文件,在jQuery mobile中动态填充列表视图
- Javascript::通过HTML5音频播放器播放列表播放多个音频文件
- 从文本文件js中读取列表
- 如何在javascript中获取静态公用文件夹中的文件列表
- 如何在 elfinder(一个 jquery 文件管理器插件)中只显示文件夹列表
- 如何通过选择下拉列表中的选项从另一个 php 文件中获取数据
- 我正在尝试从 xhtml 文件中动态提取所有
元素,并使用 javascript 将它们放入选择列表中
- 通过遍历JSON文件来填充数据列表选项
- AJAX请求php获取post/get发送的指定目录中服务器上的文件列表(无JQUERY)
- 如何从加载的JSON文件构建外部事件列表
- 使用valums-ajax上传器从上传列表中删除特定文件
- 如何使用javascript获取文件夹中的图像列表
- 应用程序脚本-自动从谷歌驱动器删除超过3天的文件-获取文件列表
- SAPUI5绑定问题:json文件中维护的列表项链接不起作用
- 如何使用javascript获取文件夹中的文件列表
- 如何在javascript文件中使用json列表文件绘制堆叠条形图
- 谷歌驱动器api, javascript列表文件返回什么
- 列表文件在一个桶未经授权的javascript从谷歌云存储
- 谷歌驱动器 - 列表文件 - Javascript