呼叫未定义

时间:2011-04-26 08:21:50

标签: javascript jquery callback call jquery-callback

我正在尝试设置我的插件以接受内部的回调函数作为选项参数:

(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);

并且错误仍然存​​在......

3 个答案:

答案 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)

    });
};