Javascript 删除另一个函数中的对象
我想知道这是否可行。首先,我应该说我正在克隆Javascript 删除另一个函数中的对象,javascript,jquery,html,object,Javascript,Jquery,Html,Object,我想知道这是否可行。首先,我应该说我正在克隆FileReader对象,并在整个应用程序中维护它(这样我就可以允许用户在正式上传文件之前删除它们) 所有这些都很好,但我一直在试图找出允许用户从这个克隆对象中删除成员的最佳方法(成员与普通FileReader对象中的文件[在我的情况下是图像]相同) 因此,基本上我已经克隆了对象,添加了一个伪哈希,它允许我引用用户想要删除的克隆成员,单击“删除”图标后,我在克隆对象中搜索与该图标关联的伪哈希,并删除该成员。如果对象处于其自身的功能中,则可以正常工作,但
FileReader
对象,并在整个应用程序中维护它(这样我就可以允许用户在正式上传文件之前删除它们)
所有这些都很好,但我一直在试图找出允许用户从这个克隆对象中删除成员的最佳方法(成员与普通FileReader对象中的文件[在我的情况下是图像]相同)
因此,基本上我已经克隆了对象,添加了一个伪哈希
,它允许我引用用户想要删除的克隆成员,单击“删除”图标后,我在克隆对象中搜索与该图标关联的伪哈希
,并删除该成员。如果对象处于其自身的功能中,则可以正常工作,但事实并非如此。因此,我在尝试删除对象的成员时遇到问题。在本例中,我将文件
设置为全局文件,但它仍然不起作用
// Our FileList object
files = e.target.files;
// Create a clone since FileList is readonly
files = cloneObject(files);
// If files isn't empty, give the user the option to remove members
if (files.length) {
files = removeSelected(files);
}
这是我的功能。不幸的是,当我点击从“上传队列”中删除一个图像时,它应该通过这个函数,但它实际上并没有删除对象,因为我知道Javascript从来没有完全删除对象,所以如果它是最后一个成员,我试着将其设置为空对象,但这不起作用。如果它不是最后一个成员,我只想在它的位置删除它。同样,因为这是在一个单独的函数中,而不是父函数中,所以它只是删除对变量的局部引用
// Remove selected file from cloned fileList object
var removeSelected = function(files) {
var dataPseudoHash = $(this).attr('data-pseudo-hash');
$('#js-selected-files').delegate('.js-remove-selected', 'click', function() {
if (files.length == 1) {
$('.js-image-upload').attr('disabled', true).addClass('btn_disabled');
files = {};
delete files;
} else {
// Loop through our files object and if we find a member with the same
// pseudoHash as the attribute from whatever 'X' icon that was clicked, remove it
$.each(files, function(i, dataPseudoHash) {
if (files[i].pseudoHash == dataPseudoHash) {
delete files[i];
files.length -= 1;
}
});
}
// Remove hidden input that prevents duplicate files being uploaded of
$('.js-pseudo-hash[value="' + dataPseudoHash + '"]').remove();
$(this).parent().fadeOut('normal', function() {
$(this).remove();
});
return files;
};
最好的处理方法是什么?可能将标志设置为true或false,然后根据情况在父函数中相应地删除对象或其成员?不太清楚。除此之外,我可以很好地上传文件,但我需要了解如何删除对象或对象的属性(如果单击了所有“删除”图标)。首先,您应该知道delete操作符只删除数组的一个元素或对象的一个元素,而不是整个数组。在你的第一个if条件下
if (files.length == 1) {
$('.js-image-upload').attr('disabled', true).addClass('btn_disabled');
files = {};
delete files;
}
您正在删除返回false的整个对象。
现在,如果您可以手动检查第二个if条件在任何情况下是否为true,则效果会更好