使用方法的Jquery插件需要调用自身

时间:2010-09-17 17:50:50

标签: javascript jquery

我在这里关注教程:http://docs.jquery.com/Plugins/Authoring

我只是想为我们正在处理的项目创建一个简单的插件,它会在输入框旁边添加+/-符号,可以用来增加框的值。

所以我正在阅读教程,并且正在讨论有多种方法的部分,一切都很顺利,除了一个小故障。

所以这是代码:

(function( $ ) {
    var methods = {
        init: function(options) {
            if (options) {
                $.extend(settings, options);
            }

            this.css('float', 'left');
            this.after('<div class="increment-buttonset"><div class="increment-button" style="float: left;">+</div><div class="decrement-button">-</div></div><br style="clear: both" />');
            $('.increment-button').click(function() {
                $.increment('change');
            });
            return this;
        },
        change: function() {
            // Increment Decrement code would go here obviously
            return this;
        }
    };

    $.fn.increment = function(method) {
        var settings = {
            'step': 1
        };

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

问题是$ .increment('change');

我想在点击时绑定+/-按钮以调用增量('更改')。我这样做时会出错。

Uncaught TypeError: Object function (a,b){return new c.fn.init(a,b)} has no method 'increment'

我在没有$的情况下尝试过。但这只是告诉我增量尚未定义。我在这里弄乱一些语法还是只是完全错了?

1 个答案:

答案 0 :(得分:0)

解决方案很简单,你以错误的方式调用方法。它应该是

$('.increment-button').click(function() {
    $(this).increment('change');
});

也就是说,因为添加到$ .fn.functionName的函数只能在$(selector).functionName等jQuery元素上调用。