2010-01-30 84 views
2

相當新的jQuery和有一點與函數我寫的,非常類似於this問題的問題,如果是那樣的東西去那麼顯然我有一個封閉的問題。 正如彼得·貝利把它上面的線,這是發生了什麼事:jQuery的迭代一個功能

  1. 遍歷一些值
  2. 定義/在使用該迭代分配的功能迭代變量
  3. 你瞭解到每一個功能的使用只有來自上次迭代的值。
  4. WTF?

這是我的代碼:

var pages=['home', 'about', 'events', 'info', 'qa', 'photos', 'contact']; 

for (i in pages) { 

    $link='"'+"[href$='gaction.php?page="+(pages[i])+"']"+'"'; 
    $source="/images/"+(pages[i])+".png"; 

    $($link).hoverIntent(function() { 
     $('#logo_text').stop(true, true).fadeOut(
     0, 
     function() { 
      $('#logo_text').attr('src', $source).fadeIn('slow'); // swaps logo 
     }); 
    }, function() { 
     $('#logo_text').stop(true, true).pause(300).fadeOut(
     0, 
     function() { 
      $('#logo_text').attr('src', '/images/name.png').fadeIn('slow'); //swaps back 
     }); 
    }); 
} 

我知道$鏈接定義是相當混亂,但該位的作品。

該函數旨在將#logo_text中的圖片替換爲一個,具體取決於懸停的鏈接,但每個鏈接的結尾都會將圖片更改爲「聯繫人」(最後一個)。

並不真正懂得如何從其他線程解決它,所以如果有人能幫忙,將是偉大的!

回答

2

你可以使用jQuery.each語句,並通過它的結構創建閉包。然後,一定要與var聲明變量,你將所有設置:

var pages=['home', 'about', 'events', 'info', 'qa', 'photos', 'contact']; 

$.each(pages, function(){ 
    var $link='"'+"[href$='gaction.php?page="+ this +"']"+'"'; 
    var $source="/images/"+ this +".png"; 

    ... rest of function untouched 

}); 

有幾種方法可以重寫的功能,但在所有誠實,如果你對你的作品(的選擇),那麼你很好。只是,而不是使用fadeOut(0, function ...)只是使用hide().attr('src', $source).fadeIn('slow')

+0

你確定?難道你沒有問題,直到hoverIntent回調得到運行,內部函數才真正創建? – Bruce 2010-01-30 05:30:21

+0

我敢肯定:) – 2010-01-30 05:35:45

+0

不過,我仍然有'頁(一)''而不是這樣this'感謝使我重讀我的功能:) – 2010-01-30 05:37:07