2011-12-13 173 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) {項目不獲取傳遞給函數。所以在這個函數裏,我沒有定義item。爲什麼會出現這種情況,我該如何解決?

回答

1

您傳遞給proxy的上下文參數被傳遞給函數this,而不是作爲參數。只需將item更改爲this即可。


備註:在您的主要功能中,您有幾個$(this).find(...) s。插件功能看到的this已經一個jQuert對象(這就是爲什麼你的this.each(...)下面的作品),不需要再次調用$()。只需this.find(...)

1

$.proxy只設置this包裝函數 - 它不會做任何與函數參數。

setInterval()將會調用您的代理函數而沒有參數,因此原始 - item也將是未定義的。在函數的第一行

var item = this; 

要修復,從函數的聲明刪除item,做。

[或將所有對item的引用重新命名爲this]。

-1

您還沒有在其他地方定義變量項目。