如何在jQuery插件中提供一个公共函数?
How can I provide a public function in a jQuery plugin?
我写了一个小的jQuery插件,结构如下:
(function($) {
// Private vars
// Default settings
$.PLUGINNAME = {
id: 'PLUGINNAME',
version: '1.0',
defaults: {
min: 0,
max: 10
}
};
// extend jQuery
$.fn.extend({
PLUGINNAME: function(_settings) {
init = function() {
}
prepare = function() {
}
...
return this.each(function() {
_this = this;
init();
});
}
});
})(jQuery);
我这样调用它:
$("#update-panel").PLUGINNAME({
min: 1,
max: 20
});
我试图提供一个额外的公共方法,其中函数内的一些数据可以在上述函数调用到插件之后更新,我不确定如何去做这件事。我要找的是这样的东西:
_PluginInstance = $("#update-panel").PLUGINNAME({
min: 1,
max: 20
});
...
...
_PluginInstance.setMin(2); //should change the minimum to 2
setMin
可能会使用一些插件的内部变量,所以我不明白如何做到这一点。我知道我没有返回一个插件的实例来做上面的事情,但是有人能告诉我如何通过保持相同的插件结构来做到这一点吗?
让这个函数成为PLUGINNAME
对象中this
的一个属性:
(function($) {
$.PLUGINNAME = {
// Default settings
};
// extend jQuery
$.fn.extend({
PLUGINNAME: function(_settings) {
// private methods
var init = function() {};
var prepare = function() {};
// public methods
this.setMin = function ( val ) {
_settings.min = val;
};
this.getMin = function () {
return _settings.min;
};
return this.each(function() {
_this = this;
init();
});
}
});
})(jQuery);
那么你可以这样做:
_PluginInstance = $("#update-panel").PLUGINNAME({
min: 1,
max: 20
});
_PluginInstance.getMin(); // 1
_PluginInstance.setMin(2);
_PluginInstance.getMin(); // 2
编辑:哦,天哪,我不敢相信我忘记了var
关键字,为什么你们都不告诉我我的苍蝇掉下来了?
你可以使用jQuery-UI方法调用style:
$("#update-panel").PLUGINNAME('method', arguments...);
然后在你的插件中:
PLUGINNAME: function(_settings, args) {
if(!$.isPlainObject(_settings)) {
// _settings (should) be the method name so
// do what needs to be done to execute the method.
return;
}
// Proceed as before.
您可能希望使用arguments
伪数组而不是额外的args
参数。如果需要将内部数据附加到单个对象,可以在PLUGINNAME函数的$(this).data('PLUGINNAME')
中存储额外的内容。
我不是jQuery爱好者,而且mu太短了的答案似乎是正确的。但我认为你也可以像jQuery自己的文档中所说的那样,使用.data()
方法来存储最小/最大值。
换句话说,让你的代码查找元素上的现有数据,所以你第一次调用$('#update_panel').plugin({min:1, max:20})
,它不会找到任何现有的数据,所以它会把这些最小/最大值放在一个对象中,并使用.data()
"保存"它们。
然后,当您稍后调用$('#update_panel').plugin({min:2})
时,您的代码会找到现有的数据,并更新值。
只是一个想法
你可以定义一个变量,就像你定义一个插件。
$.fn.PLUGINNAME.someVariable = 4;
或者,如果你喜欢,只是在插件外声明一个空变量,然后从插件内部添加到它
var someVariable;
(function($) {
... the plugin code
})(jQuery);
- 我可以在json对象中添加一个函数吗
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- mongoose.connect undefined不是一个函数
- 监听器必须是一个函数
- 使用JS函数来使用另一个函数的语法?node.js
- 如何取消object.prototypes javascript的一个函数
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何在javascript中使用不止一个函数
- jQuery-在页面加载时执行一个函数
- jquery UI draggable:UI.children不是一个函数
- jQuery Mobile Undefined不是一个函数
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- JS异常:animate不是一个函数
- 如何将一个函数附加到一个不存在的元素上
- JavaScript/jQuery-添加添加和删除类与下一个函数之间的延迟