2013-10-08 70 views
0

我已经开始编码这个脚本,它允许你一次上传多个文件。 所以我还没有到达上传部分,但只是文件存储等。Javascript(Jquery lib 1.9.1)多文件上传ajax删除文件失败

到目前为止,我已经做了文件添加,并添加文件后,它会创建一个div,所以用户可以看到他要上传的文件。

工作得很好。

现在我为每个div添加了一个id,例如:<div id="file_filename" class="files">Filename</div> 现在我想将它删除,如果你点击文件名。

所以我添加的文件删除功能,如:

(我是从document.body的加载因为它不是一个自然的div)

$(document.body).on("click", ".files", function(e) { 
    console.log("Sent id: " + e.target.id); 
    removeFile(e.target.id); 
}); 

function removeFile(file) { 
    var split = file.split("file_"); 
    console.log("Now going to loop for file: " + file); 
    console.log("Splitted version: " + split[1]); 
    for (i = 0; i < images.length; i++) { 
     if (images[i].name != split[1]) { 
      continue; 
     } 
     console.log("removed " + split[1] + " with index: " + i + " and file name: " + images[i].name); 
     images.pop(i + 1); 
    } 

    updateDivs(); 

    console.log("files left: "); 
    for (i = 0; i < images.length; i++) { 
     console.log(images[i].name); 
    } 
} 

基本上,它得到的标识点击课程,并将ID发送到removeFile函数。 的removeFile功能将拆分文本,以便它会得到的文件名,之后file_

然后我通过图像阵列循环,并检查名称是相等的,如果是删除文件&重装的div。

刷新div的功能:

function updateDivs() { 
    var divs; 
    for (i = 0; i < images.length; i++) { 
     divs = (divs != null) ? divs + "<div id='file_" + images[i].name + "'class='files'>" + images[i].name + "</div>" : "<div id='file_" + images[i].name + "'class='files'>" + images[i].name + "</div>"; 
    } 
    $("#myImages").html(divs); 
} 

正如你看到我有很多的日志更新,所以在删除,我得到这个日志:

Sent id: file_images.jpg upload.js:82 
Now going to loop for file: file_images.jpg upload.js:63 
Splitted version: images.jpg upload.js:64 
removed images.jpg with index: 0 and file name: images.jpg upload.js:69 
files left: upload.js:75 
images.jpg 

问题:

如果你注意到,我点击了images.jpg,然后它说它删除了images.jpg,但是它说文件剩下了:images.jpg。

而不是删除images.jpg它删除了我上传的其他文件。

我已经试过了我所知道的一切,我知道这是最好自己解决这些问题,但这个问题对我来说没有任何意义。

我在那里做错了什么?

编辑:顺便说一下,图片[0] = images.jpg,我已经先上传了。

回答

0

不知道你的图像阵列看起来像什么,这可能不是100%正确的,但我怀疑你的问题已做的线images.pop(i + 1);

.pop()不带任何参数,只删除最后一个元素来自阵列。如果你想从指数数组中删除元素,使用splice()这样的:

images.splice(i-1, 1);(将当前索引处删除1项的for循环)

一个例子:

<script type="text/javascript"> 

var images = ["banana", "orange", "apple"]; 
images.splice(1,1);  // Will remove 1 item at position 1 (orange) 
alert(images);   // Should read: "banana, apple" 

</script> 

希望这会有所帮助。