[英]How to access functions in jQuery plugins from outside the plugin?
以示例的插件为例:
jQuery.autocomplete = function(input, options) {
function abc(){}
function def(){}
}
功能正常并且符合预期。 但是,我希望能够调用函数abc(); 来自$(document).ready(function(){}); 声明。 以下不起作用,我真的很喜欢一些建议。
$(document).ready(function() {
jQuery.autocomplete.abc();
abc();
$(this)->abc();
}
在插件的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')将'this'留给身体,因此......
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声明
无论如何,这套片段揭示了一个研发的夜晚,以探索并帮助理解什么是lir bir betta。
你肯定需要阅读所有你可以在这里吸收的东西......
http://alexsexton.com/blog/2010/02/using-inheritance-patterns-to-organize-large-jquery-applications/
您的自动完成功能必须以某种方式显式地使这些功能可用,可能通过在某些全局对象上引用它们。 否则,它们完全被外界所隐藏,无法访问它们。
在jQuery中,私有函数(就像你在问题中描述的那些函数)通常与实例绑定。 在函数内部,它们使用本地范围的变量,或者使用this
关键字与实例进行交互。 所以,我不知道如何从onload调用它们是有意义的。 如果插件正确开发,作者将在必要时实现回调; 回调将通过实例分配,但不是全局分配。
如果您正在编写此插件,并希望此行为,语法可能如下所示:
jQuery.autocomplete = function(input, options) {}
jQuery.autocomplete.abc = function(){};
jQuery.autocomplete.def = function(){};
通过$.autocomplete
可以全局访问这些功能。
好的,当你输入一个框时,jQuery插件会将div添加到标签云中。 单击其中一个“标签”将其添加到辅助列表中。 单击辅助列表会从辅助列表中删除该项目。 然后,我希望此单击将项目添加到主列表,只有它与键入框中的文本匹配。 出于这个原因,我想再次运行自动完成代码。 为了解决这个问题,我使用“click”事件而不是“keydown”向我的私有代码添加了辅助功能。 这允许我向辅助列表中的div添加触发器(“单击”),这会再次触发自动完成操作。 问题解决了。 没有你所有的帮助,我无法理解这一点。 谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.