2009-11-20 7 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);')를 사용하면 효과가있다. –

답변

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

+0

네, 또는 내가 쓴대로, 이거 전에 돌아가십시오. – David

+0

좋은 답변입니다. 그의 기능은'정의되지 않은 '것을 반환했다. 나는 또한'var'을 추가하여'var self = $ (this); '를 읽어서 그 함수로 범위를 지정합니다. 지금은 세계적입니다. –