我正在尝试设置我的插件以接受内部的回调函数作为选项参数:
(function($) {
$.fn.MyjQueryPlugin = function(options) {
var defaults = {
onEnd: function(e) {}
};
var settings = $.extend({}, defaults, options);
return this.each(function() {
// do stuff (complete() gets called here)
});
};
function complete(e){
settings.onEnd.call(this); // <- the error?
}
})(jQuery);
但我得到一个错误,call()未定义。我的代码出了什么问题?
好的,我改变了这个:
(function($) {
$.fn.MyjQueryPlugin = function(options) {
var defaults = {
onEnd: function(e) {}
};
var settings = $.extend({}, defaults, options);
var complete = function(e){
settings.onEnd.call(this); // <- the error?
}
return this.each(function() {
// do stuff (complete() gets called here)
});
};
})(jQuery);
并且错误仍然存在......
答案 0 :(得分:3)
您尝试在其定义的函数之外引用settings
。您已将settings
作为分配给$.fn.MyjQueryPlugin
的函数中的局部变量,但随后您将从不关闭该局部变量的函数中使用它。
为每次complete
MyjQueryPlugin
的{{1}} settings
来电创建一个新的(function($) {
$.fn.MyjQueryPlugin = function(options) {
var defaults = {
onEnd: function(e) {}
};
var settings = $.extend({}, defaults, options);
return this.each(function() {
// do stuff (complete() gets called here)
});
// `complete` now closes over `settings`
function complete(e){
settings.onEnd.call(this); // <- the error?
}
};
})(jQuery);
函数:
settings
...但当然涉及创建一个功能。也许那很好,取决于插件的作用。
或者,将complete
作为参数传递给{{1}}。
答案 1 :(得分:2)
settings
不在complete()
范围内。
答案 2 :(得分:1)
变量设置超出了完整功能的范围。将完整功能放在已定义设置的功能中。
$.fn.MyjQueryPlugin = function(options) {
var defaults = {
onEnd: function(e) {}
};
function complete(e){
settings.onEnd.call(this); // <- the error?
}
var settings = $.extend({}, defaults, options);
return this.each(function() {
// do stuff (complete() gets called here)
});
};