繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM