我已经在插件之外声明了变量,所以我可以稍后修改它们:
$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);
那么如何为使用该插件的每个元素设置不同的变量?
答案 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){
// ...
};