2011-12-13 4 views
0

화면에 이미지 로테이터가 여러 개인 경우 이미지 로테이터를 만들려고합니다.jquery가 변수 함수로 넘김

// jQuery plugin to make image containers rotate. 
(function($){ 

    // Swap text with title attribute 
    $.fn.scWFWImageRotator = function() { 

     var rotatorTimeSwap = 6000; 

     $(this).find("img").removeClass("selected"); 
     $(this).find("img:first-child").addClass("selected"); 

     var rotatorImageChangeFunc = function(item) { 
      var rotatorImages = $(item).children("img"); 
      var imgSelected = $(item).children("img.selected"); 
      var rotatorImgCount = rotatorImages.length; 
      var rotatorCurImage = $(imgSelected).index(rotatorImages); 
      alert(item); 
     } 

     return this.each(function() { 

      var rotatorTimer; 
      var $this = $(this); 
      var func = $.proxy(rotatorImageChangeFunc, $this); 

      rotatorTimer = setInterval(func, rotatorTimeSwap); 

      $this.hover(
       function() { rotatorTimer = clearInterval(rotatorTimer); }, 
       function() { rotatorTimer = setInterval(func, rotatorTimeSwap); } 
      ); 

     }); 

    }; 

})(jQuery); 

문제는 다음과 같습니다 : rotatorImageChangeFunc = function(item) { 항목은 함수에 전달하기되지 여기에 내가 지금까지 가지고 것입니다. 그래서 함수 안에는 아이템에 대해 정의되지 않은 값이 생깁니다. 왜이 경우이며 어떻게 내 놓아야합니까?

답변

1

proxy에 전달하는 컨텍스트 매개 변수는 인수가 아닌 this의 함수로 전달됩니다. itemthis으로 변경하십시오.


사이드 노트 : 주 기능의 경우 $(this).find(...)입니다. 플러그인 기능이 보이는 this입니다. 이미 인 jQuert 객체 (this.each(...)이 작동하는 이유입니다)에 $()을 다시 호출 할 필요가 없습니다. 그냥 this.find(...).

1

$.proxy은 래핑 된 함수에 대해서만 this만을 설정합니다. 함수 매개 변수에서는 아무 것도 수행하지 않습니다.

setInterval()은 매개 변수없이 프록시 기능을 호출하므로 원본 - item은 정의되지 않습니다.

는 고정 함수의 선언에서 item을 제거하고 수행합니다

var item = this; 

를 함수의 첫 번째 줄에.

[또는 item에 대한 모든 참조의 이름을 this으로 바꿉니다.

-1

가변 항목 anaywhere를 정의하지 않았습니다.