2009-11-20 53 views
1

我對jQuery擴展有些困惑,不像我期望的那樣工作。我已經定義了以下功能:jQuery擴展(作用域?)問題

$.fn.poster = function() { 
    this.each(function() { 
     self = $(this); 
     self.click(function() { 
      /* does stuff */ 
      $.post(url, data, function(d, t) { handle_storage(d, t, self); }, "json"); 
     }); 
    }); 
} 

handle_storage = function(storages, status, caller) { 
    container = $("<div>"); 
    $("<span>").poster().html(storage.name).appendTo($("<li>").addClass("folder").appendTo(container)); 
} 

$(function() { 
    $("li.storage span").poster(); 
}); 

到海報()在準備功能的初始調用工作,但handle_storage()回調裏面,我得到一個「海報()是未定義」的錯誤。是什麼賦予了?

+0

你可能有'自我= $的問題(這一點);'互聯網資源管理器(我得到「未實現的錯誤」),因爲self是窗口對象的屬性。然而,使用var關鍵字('var self = $(this);')是有效的。 – 2009-11-20 22:04:59

回答

3

我真的不知道你怎麼個意思,但你可能只需要返回this繼續鏈接:

$.fn.poster = function() { 
    return this.each(function() { 
     self = $(this); 
     self.click(function() { 
      /* does stuff */ 
      $.post(url, data, function(d, t) { handle_storage(d, t, self); }, "json"); 
     }); 
    }); 
} 
+0

doh。是啊。我只是把「歸還這個;」在$ .fn.poster()定義的末尾,一切都很好。謝謝。 – Wells 2009-11-20 22:03:01

+0

是的,還是照我寫的那樣做,在此之前放回去。每一種方式都行。 – David 2009-11-20 22:05:04

+0

很棒的回答。他的函數返回undefined。我還會添加'var',以便讀取'var self = $(this);'將其作用於該函數。現在它是全球性的。 – 2009-11-20 22:05:21