如何从插件外部访问jQuery插件中的函数?

时间:2010-11-22 17:35:20

标签: javascript jquery jquery-plugins

以示例的插件为例:

jQuery.autocomplete = function(input, options) {
    function abc(){}
    function def(){}
}

这些功能正常运行并符合预期。但是,我希望能够调用函数abc();来自$(document).ready(function(){});声明。以下不起作用,我真的很喜欢一些建议。

$(document).ready(function() {
    jQuery.autocomplete.abc();
    abc();
    $(this)->abc();
}

4 个答案:

答案 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;),这会再次触发自动完成操作。问题解决了。没有你所有的帮助,我无法想出这个。谢谢!