2009-11-20 41 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