2012-10-16 45 views
0

如何從同一個對象內部調用jQuery插件的功能。我使用確切的建議解決方案http://docs.jquery.com/Plugins/Authoring#Plugin_Methods。從外部的代碼,我可以調用這個方法:從功能的jQuery插件調用功能

$('div').tooltip("myMethod", an_attr); 

但我怎麼能調用同一個從內尤其是形成該事件時,「這」不是插件的對象。

var methods = { 
    var $this = $(this); 
    init : function(options) { 
     $this.click(function(){ 
      $this.fn2("myMethod", an_attr); //is it right way? 

     }); 
    }, 
    fn2 : function() { 
     //but how can I call the myMethod. here ? 
    }, 
    myMethod : function() {... 
+0

你不需要在'$()'中包裝'this',它已經是一個jQuery對象。 –

+0

你能否詳細說明'this'應該是什麼以及你想調用什麼,按什麼順序? – pimvdb

回答

1

fn2調用myMethod你可以做到以下幾點:

... 
fn2: function() { 
    methods.myMethod(); 
} 
... 

要確保myMethod具有相同的背景下,因爲所有其他的,你可以這樣做:

... 
fn2: function() { 
    methods.myMethod.call(this); 
} 
... 

關於call()here的更多詳細信息。

A JS Fiddle here

+0

謝謝,它工作正常。有沒有什麼辦法可以在沒有通過'call'發送這個DOM節點的情況下到達DOM節點。 –

+0

我想一個答案可能是更改'methods'中的每個函數,以始終要求jQuery對象是第一個參數,並更改'methods [method] .apply(this,...)'行以確保第一個參數也是'this'(jQuery對象),那麼您可以使用[jQuery.each](http://api.jquery.com/jQuery.each/)獲得DOM節點的集合。另一種方法是使用[$ .proxy](http://api.jquery.com/jQuery.proxy/)... –