【问题标题】:Deleting an object within another function在另一个函数中删除对象
【发布时间】:2012-03-07 05:23:16
【问题描述】:

我试图弄清楚这是否可能。首先,我应该说我正在克隆 FileReader 对象并在整个应用程序中维护它(这样我就可以允许用户在正式上传文件之前删除它们)。

一切正常,但我一直在试图找出允许用户从这个克隆对象中删除成员的最佳方法(成员与将找到的文件 [在我的情况下为图像] 相同)在普通的 FileReader 对象中)。

所以基本上我已经克隆了对象,向它添加了一个pseudoHash,它允许我引用用户想要删除的克隆成员,然后单击“删除”图标,我搜索关联的@ 987654323@ 我已在克隆对象中绑定到该图标,然后删除该成员。如果对象在其自己的函数中,则可以正常工作,但事实并非如此。所以我在尝试删除对象的成员时遇到了麻烦。在这种情况下,我将 files 设为全局,但它仍然无法正常工作。

        // 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;
    };

处理此问题的最佳方法是什么?也许将标志设置为真或假,然后根据情况在父函数中相应地删除对象或其成员?不太确定。除此之外,我已经很好地上传了文件,但我需要了解如何删除对象或对象的属性(如果单击了所有“删除”图标)。

【问题讨论】:

    标签: javascript jquery html object


    【解决方案1】:

    首先你应该知道删除操作符只删除数组中的一个元素或一个对象的元素,而不是整个数组。在你的第一个 if 条件下

    if (files.length == 1) {
                $('.js-image-upload').attr('disabled', true).addClass('btn_disabled');
                files = {};
                delete files;
    }
    

    您正在删除返回 false 的整个对象。 现在,如果您可以手动检查第二个 if 条件是否为真,那就更好了。

    【讨论】:

      猜你喜欢
      • 2020-10-30
      • 1970-01-01
      • 2021-03-15
      • 2019-11-23
      • 1970-01-01
      • 2015-06-19
      • 2018-02-23
      • 1970-01-01
      • 2019-11-24
      相关资源
      最近更新 更多