如何从全局范围内调用jquery函数内的方法?

时间:2013-06-24 15:39:37

标签: jquery methods visibility

我正在寻找一种在jquery函数中调用方法的方法。

示例:在上面的代码中,如何从全局范围调用method()方法?

(function( $ ) {

    $.fn.test = function() {

        var method = function() {
            alert('test succeeded!');
        };

    }

})( jQuery );

我尝试使用以下代码:

$(document).ready(function() {

    $(document).test.method(); // undefined

});

但这没有用。

小提琴:http://jsfiddle.net/kB7mc/

1 个答案:

答案 0 :(得分:3)

您的方法仅在函数test内可用,但您无法在范围外访问它。相反,你可以这样做。在调用它时,请记住为()设置方法调用test,即$(document).test().method();而不是$(document).test.method();

(function( $ ) {

    $.fn.test = function() {
         var method = function() {
            alert('test succeeded!');
        };

         return {method:method};
    }

})( jQuery );

$(document).ready(function() {
    $(document).test().method(); // undefined
});

Fiddle

使用Jquery插件模式。

(function ($) {
    var methods = {

        method : function () {
            alert('test succeeded!');
            return this; //return element for chaining
        },
         method2 : function () {
            alert('test2 succeeded!');
             return this;
        }
    };

    $.fn.test = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist');
        }
    }

})(jQuery);

$(document).ready(function () {
    $(document).test('method'); 
    $(document).test('method2'); 

});

<强> Fiddle