簡體   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