jQuery插件:阻止覆盖选项

时间:2017-08-18 15:48:28

标签: javascript jquery jquery-file-upload

我做了一个自定义插件,为jQuery File Upload插件添加常用功能和验证。这是一份简历,所以你可以得到这个想法。

$.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结构的小提琴(不起作用) https://jsfiddle.net/a6axfm3v/

编辑:我以两种方式使用此插件

$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_buttons都有相同的,但与$input的不同......

感谢。

0 个答案:

没有答案