Javascript jQuery插件:防止覆盖选项

Javascript jQuery插件:防止覆盖选项,javascript,jquery,jquery-file-upload,Javascript,Jquery,Jquery File Upload,我做了一个自定义插件来为插件添加公共功能和验证。这是一份简历,这样你就可以了解你的想法 $.fn.myCustomUpload = function(options) { if (!$(this).is('input:file')) { return false; } $(this).fileupload({ maxChunkSize: options.maxChunkSize, maxFileSize: options

我做了一个自定义插件来为插件添加公共功能和验证。这是一份简历,这样你就可以了解你的想法

$.fn.myCustomUpload = function(options) {

    if (!$(this).is('input:file')) {
        return false;
    }

    $(this).fileupload({
        maxChunkSize: options.maxChunkSize,
        maxFileSize: options.maxFileSize,
        acceptFileTypes: options.allowedTypes,
        type: 'POST',
        dataType: 'json',

        add: function (e, data) {
            // common validations
        },

        start: function (e) {
            // foo
            if (options.onUploadStart) {
                options.onUploadStart();
            }
        },

        fail: function(e, data) {
            // foo
            if (options.onUploadError) {
                options.onUploadError(result);
            }
        },

        done: function(e, data) {
            // foo
            if (options.onUploadDone) {
                options.onUploadDone(media_data);
            }
        }
    });
};
问题是我进行了验证或处理数据,并返回结果和回调。但是,我注意到回调在下一次调用插件时被覆盖。。所以,我在一个地方上传了一个文件,然后在另一个地方重新显示结果!我做错了什么

我是否需要将选项存储到每个输入元素,如
.data()

编辑2:修改html和JS结构(不起作用)

编辑:我用两种方式使用这个插件

$input.myCustomUpload({
    // ...
    onUploadStart: this.onNewPostUploadStart.bind(this),
    onUploadProgress: this.onNewPostUploadProgress.bind(this), //this reference to my object
    onUploadError: this.onNewPostUploadError.bind(this),
    // ...
});
$uploads_buttons = $container.find('._attach_image');

$uploads_buttons.each(function() {
    var $upload_button = $(this);
    var $parent = $upload_button.parents('._post-container');

    $upload_button.myCustomUpload({ /*options, callbacks, etc*/});
});
$input
有自己的回调,
$uploads\u按钮与
$input
按钮相同,但不同


谢谢。

您是否碰巧使用相同的选项对象多次调用此插件,并在两者之间修改相同的对象?我相信通常情况下,插件会使用提供给它的选项和$.extend({},options)来创建它们的本地副本。因此,如果更改了原始对象的内容,它们将不会影响jQuery.fn
中的本地copySide注释。此
已经是jQuery对象。在上面的代码中,不需要用$()来包装它。您注释掉了您作为方法的选项传递的内容,这是我们中一些人的主要问题。“不,这是另一个单独的输入”HTML中存在多少不同的
元素?如果(!$(this).is('input:file'){return false;}
的目的是什么?您是否可以在问题中包含HTML并创建一个stacksnippet进行演示?看见