如何修改jquery插件中的变量?

时间:2013-12-07 16:52:23

标签: jquery jquery-plugins this

我已经在插件之外声明了变量,所以我可以稍后修改它们:

$node.ondrag({start:function(){ console.log(this,"start drag"); }});
$node.change({start:function(){ console.log(this,"other function"); }});

但显然如果我将插件附加到另一个元素,那么两个函数都会被覆盖。

(function($) {
    var startfn, dragfn, endfn;
    $.fn.ondrag = function(opt){
        var obj = this;
        startfn = opt['start']||null;
        this.on("mousedown",function(){ if (startfn) obj.startfn(); });
        return this;
    };
    $.fn.change = function(opt){
        startfn = opt['start'];
        return this;
    };
})(jQuery);

那么如何为使用该插件的每个元素设置不同的变量?

1 个答案:

答案 0 :(得分:2)

您可以使用jQuery's .data API将信息存储在每个元素上,而不是将信息存储在变量中。

E.g。

var startfn = opt['start'] || null;
this.data('myplugin.startfn', startfn);

如果你正在做更多高级的东西,我建议你有一个look at jQuery UI's $.widget factory method。它应该使创建有状态插件更容易。它还使用了$.data

此外,如评论中所述,您不应覆盖现有的jQuery方法。您的.change函数看起来像是插件中的某种辅助函数。查看“提供对辅助功能的公共访问权限”下的jQuery documentation about plugins 。基本上,你会.change插件函数的属性:

$.fn.ondrag.change = function(opt){
    // ...
};