以示例的插件为例:
jQuery.autocomplete = function(input, options) {
function abc(){}
function def(){}
}
这些功能正常运行并符合预期。但是,我希望能够调用函数abc();来自$(document).ready(function(){});声明。以下不起作用,我真的很喜欢一些建议。
$(document).ready(function() {
jQuery.autocomplete.abc();
abc();
$(this)->abc();
}
答案 0 :(得分:4)
在插件的init中有这个......
if( !data ) {
/* Settings Extraction */
$.extend(s, defaults, options);
/* Initialize Code */
/* Data Storage */
var YoPlugin = $('<div />', {
text : $this.attr('title')
});
$(this).data('YoPlugin', {
target : $this,
myInternalFunction: myInternalFunction,
settings : $.extend({}, s),
YoPlugin : YoPlugin
});
data = $this.data('YoPlugin');
}
您可以公开myInternalFunction所展示的内部函数。 从一个叫做事件的事件进入对象说$('body')将'这'作为身体不可用,所以......
var multiSel = $('.YoPlugin');
var singleSel = multiSel[0]; //or other way to select the singleton or specific plugin enhanced target
var pluginDataObj = $(singleSel).data('YoPlugin');
var func = pluginDataObj['myInternalFunction'];
func();
我认为添加链接作为外部插件引用更好 就像init:在插件中声明一样 或者类似的路线 $ .fn.YoPlugin.myInternalFunction
无论如何,这套片段揭示了一个R&amp; D的夜晚,探索并帮助理解什么是lir bir betta。
此外,你肯定需要阅读所有你可以在这里吸收的东西......
http://alexsexton.com/blog/2010/02/using-inheritance-patterns-to-organize-large-jquery-applications/
答案 1 :(得分:0)
您的自动完成功能必须以某种方式显式地使这些功能可用,可能通过在某些全局对象上引用它们。否则,它们完全被外界所隐藏,无法访问它们。
答案 2 :(得分:0)
在jQuery中,私有函数(就像你在问题中描述的那些)通常与实例绑定。在函数内部,它们使用本地范围的变量或this
关键字与实例进行交互。所以,我不知道如何从onload调用它们是有意义的。如果插件正确开发,作者将在必要时实现回调;回调将通过实例分配,但不是全局分配。
如果您正在编写此插件,并希望此行为,则语法可能如下所示:
jQuery.autocomplete = function(input, options) {}
jQuery.autocomplete.abc = function(){};
jQuery.autocomplete.def = function(){};
这些功能可通过$.autocomplete
全局访问。
答案 3 :(得分:0)
好的,当你输入一个框时,jQuery插件会将div添加到标签云中。点击其中一个&#34;标签&#34;将其添加到辅助列表中。单击辅助列表会从辅助列表中删除该项目。然后,我希望此单击将项目添加到主列表,只有它与键入框中的文本匹配。出于这个原因,我想再次运行自动完成代码。为了解决这个问题,我在我的私人代码中添加了一个辅助功能,其中包含&#34; click&#34;事件而不是&#34; keydown&#34;。这允许我向辅助列表中的div添加触发器(&#34;单击&#34;),这会再次触发自动完成操作。问题解决了。没有你所有的帮助,我无法想出这个。谢谢!