只将唯一文件添加到容器中?

我正在使用jQuery文件上传插件 – 我将自动上传文件上传设置为false,我的行为是,在添加文件时,我建立了一个显示文件名的表和一个删除按钮,允许用户删除文件在上传之前。 然后有一个上传所有文件按钮?

因此,如果用户添加名为foo.txt的文件,则会创建一行。 但是,如果他们再次添加foo.txt,它将创建另一行。 我想检查该方案的现有表,并向用户发出警报,而不是创建该行。

到目前为止上传的代码是:

$('#uploadFile').fileupload({ replaceFileInput: false, singleFileUploads: true, add: function(event, data) { $.each(data.files, function (index, file) { var rows = $('#files > tr'); // always getting length 0?? data.url = myUrl; data.type = 'POST'; data.context = $('' + 'Selected File : ' + file.name + '' + ' ' + '' + '') .appendTo('#files') .data('data', data); }); }); 

请注意,为每个添加的文件调用add函数一次,这就是我想要的。 但是当我尝试获取表中的行时,我总是得到0的长度 – 即使我向表中添加一个文件然后添加另一个文件 – 第二次按下add方法时行长度仍为0我原以为是1?

如果我能够在添加之前获取所有行,那么我想我必须在每行上执行$ .each以检查当前文件名与行中的文件名 – 如果它等于其中任何一行,则跳过并且不运行追加代码,而是显示警报?

我认为问题是'#files > tr'选择器。 它选择所有

元素作为#files元素的直接子元素,但它们不是直接子元素,因为浏览器会为您插入

元素。 你可以尝试'#files > tbody > tr'或只是'#files tr'

这是一个certificate这一点的jsfiddle 。

你可以自己添加

,然后安全地使用'#files > tbody > tr' 。 当然,您必须将调用更改为.append()然后将新的

附加到

而不是