2010-10-19 47 views
2

有沒有辦法在我的腳本中直接調用jQuery插件中定義的方法?如何從外部調用jQuery插件中的方法?

更新

(function($){ 
    $.fn.myPlugin = function (options) { 
    return this.each(function() { 

     function doSomething() { 
     // do something 
     } 

     function doSomethingElse() { 
     // do something else 
     } 

     doSomething(); 
     doSomethingElse(); 
    }); 
    } 
})(window.jQuery); 

現在我想從我的腳本調用doSomethingElse()。有沒有辦法做到這一點?

+0

希望此鏈接幫助http://forum.jquery.com/topic/how-do -i-call -a-call-a-plugin-once-it-s-attached – 2010-10-19 14:03:08

+1

插件通常使用閉包,並只允許公衆訪問一些需要根據需要進行更改的變量(選項),這意味着方法通常是私有的,不能從外部調用。但通過引入新的選項,您可以按照您的要求擴展或修改插件。 – naiquevin 2010-10-19 14:07:33

回答

4

直接回答你的問題是「否」。如發佈的那樣,該代碼顯式地隱藏了來自外部世界的這些功能。

一種jQuery-ish方式使這些功能可用是爲了區別它們。就個人而言,我喜歡創建具有相應的「全局」對象的插件,所以如果我有

$.fn.pointy = function() { 
    // plugin 
} 

我還必須:

$.pointy = { 
    something: function() { ... }, 
    somethingElse: function() { ... } 
} 

這是很好的同時提供相關的公用事業,也配置蜜蜂。因此,您可以將「doSomething」功能放在那裏,然後通過將名稱限定爲$.myPlugin.doSomething()來在插件中使用它們。當然你也可以通過創建這個函數在你的插件初始化中,這樣他們可能會關閉並訪問其他的私有函數。

0

我不是100%肯定,我得到你,但定義你仍然可以CAL它jQuery的選擇之外的新功能之後,請參閱:

$.fn.myfunc = function(){ 
    alert('foo'); 
} 
$.fn.myfunc(); // works 
$('#something').myfunc(); // works too 

所以你必須找出到底如何調用方法,然後通過$.fn.func()

0

您還可以使用事件,使插件正在偵聽帶綁定的事件,然後調用觸發器。可能是一個像窗口等目標

1

在我看來最好的是使用事件系統,當你nedd從外面打電話。 這裏是你的代碼的結果:

(function($){ 
    $.fn.myPlugin = function (options) { 
    return this.each(function() { 
     var $this = $(this); 
     $this.on('doSomething', function() { 
     // do something 
     } 

     $this.on('doSomethingElse', function() { 
     // do something else 
     } 

     $this.trigger('doSomethingElse'); 
     $this.trigger('doSomething'); 
    }); 
    } 
})(window.jQuery); 

或outisde用同樣的方法把它叫做:

$('.myPluginDiv').trigger('doSomethingElse'); 
$('.myPluginDiv').trigger('doSomething'); 
相關問題