0

我在下面编写了一个 jQuery 插件,并希望能够为元素上的同一个实例再次调用它。

插件去...

(function($) {
    $.fn.myPlugin = function(options){

        var settings = {
            color: null
        };

        if (options) {  
            $.extend(settings, options);
        }

        return this.each(function(){
            var self = this;
            var pics = $('li', self);

            function refresh() {
                pics = $('li', self);
            };

            $('a', self).click(function(){
                pics.filter(':last').remove();
                alert(settings.color);
                refresh();
                return false;
            });
        });
    }
})(jQuery);

在页面中,这被称为...

$('#test').myPlugin({ color: 'blue' });

现在我想为同一个实例调用同一个插件,但将字符串refresh作为选项传递,而所有其他变量都是相同的(所以颜色仍然是blue)例如..

$('#test').myPlugin('refresh');

这将执行该refresh()功能。

我怎么能用上面的方法做到这一点?

编辑:为了更清楚,我正在考虑 jQuery UI 如何处理他们的插件。在可排序插件中,您可以执行$("#sortable").sortable();然后$("#sortable").sortable('refresh');在同一元素上执行。这就是我想要达到的目标。

4

2 回答 2

1

您可以存储您的实例.data()并在创建实例时对其进行检查。

就像是:

$.fn.doStuff = function () {
  var ob = $(this);
  var data = ob.data();
  if (data.doStuff !== undefined) {
    return data.doStuff;
  }
  doStuff;
});
于 2012-09-18T15:55:15.917 回答
0
(function($) {
$.fn.myPlugin = function(options){
    var init = function($self, ops){
        $self.find("a").click(function(){
            pics.filter(':last').remove();
            alert(settings.color);
            refresh();
            return false;
        });
    };  

    this.refresh = function(){
       //your code here
    };

    return this.each(function(){
        var self = this;
        var pics = $('li', self);
        var settings = {
            color: null
        };    

        var ops = $.extend(true, settings, options);

        init($(this), ops);            

    });
}
})(jQuery);

尝试这样的事情。你可以像 $().myPlugin().refresh(); 这样调用 refresh();

于 2012-09-18T15:51:58.950 回答