这是我第一次尝试jQuery插件,并且我已经设法凑齐了几乎可以工作的东西。我有一个按钮,一旦按下,通过ajax发送一个ID以删除图像。我的问题是,当AJAX调用返回,我在我的萤火虫控制台窗口中收到以下错误:如何在Ajax调用之后引用jQuery插件实例(调用插件函数)
TypeError: self.releaseCropBoxIfSet is not a function
下面是一个剥离下来我的插件的版本:
if(typeof Object.create !== 'function'){
Object.create = function(obj){
function F() {};
F.prototype = obj;
return new F();
};
}
(function($, window, document, undefined) {
var uploadCrop = {
init: function (options, elem){
var self = this;
self.elem = elem;
self.$elem = $(elem);
self.options = $.extend({}, $.fn.uploadCropPlugin.options, options);
self.deleteUploadedImageButton = $('#'+self.options.deleteUploadedImageButton);
self.ajaxurl = self.options.ajaxurl;
self.deleteUploadedImageButton.on('click', function(e) {
$(this).hide();
$.ajax({
url: self.ajaxurl,
type: 'post',
success: self.deleteSuccess,
error: self.deleteError,
data: {
IDtoDelete : IDtoDelete,
action : 'deleteImage'
}
});
});
},
deleteSuccess: function(data) {
var self = this;
var returnedData = $.parseJSON(data);
self.releaseCropBoxIfSet(); // I am getting an error here
},
releaseCropBoxIfSet: function() {
var self = this;
// REMOVE OLD JCROP
if (typeof self.jcrop_api != "undefined") {
self.jcrop_api.release();
self.jcrop_api.destroy();
}
}
};
$.fn.uploadCropPlugin = function(options) {
return this.each(function() {
var thisUploadCropObj = Object.create(uploadCrop);
thisUploadCropObj.init(options, this);
});
};
$.fn.uploadCropPlugin.options = {
// my vars here
};
})(jQuery, window, document);
我不知道是否有问题在Ajax调用期间self
会丢失。所以我尝试发送self
作为变量的函数,然后返回它,但我得到了错误的方式。我也尝试将self.
位从函数调用的前面留下,但它仍然不起作用。
尝试取出(个体经营)并调用该函数通常不知道这将有助于虽然。 – Tasos 2014-09-20 16:11:37
@Tasos谢谢我尝试过,只是得到了:ReferenceError:releaseCropBoxIfSet没有被定义:-( – 2014-09-20 16:21:43
好的。哪里是(self)引用。我不知道你是如何构造堵塞的,但通常它应该是(self = {myfunctiona:function(){},myfunctionb:function(){},myfunctionc:function(){})所以当你调用一个函数组(自我)eg(functionc)你(self.functionc() ) - 你有这样的结构 - 示例脚本--- http://nativedroid.godesign.ch/res/js/script.js – Tasos 2014-09-20 16:51:50