2010-10-21 30 views
1

我很抱歉,如果這只是一個問題一遍又一遍的問。我發現了一些類似的問題,這些例子並沒有讓我完全想到我需要的地方。這與jQuery Closures, Loops and Events類似。設置變量與jQuery點擊功能一起使用

$('a.highslide').each(function() { 
    hsGroup = $(this).attr("rel"); 

    if(hsGroup.length > 1){ 
    hsGroup = hsGroup.replace(/\s/g , "-");  
    }  

    this.onclick = function() { 
    return hs.expand(this, { slideshowGroup: hsGroup }); 

    } 
}); 

這段代碼設置了一個onclick,它會啓動一個highslide彈出窗口。我已經添加了slideshowGroup屬性和它上面的hsGroup代碼,它將拉取Rel屬性的內容以定義每個組的屬性。您可能馬上看到的問題是,hsGroup的內容不是該匿名函數的本地內容。所以在運行時,每個鏈接的值都是相同的。我已經瀏覽了一些關閉示例,但迄今未能使它們適用於我的情況。

感謝,

+0

不要忘了'var'! – Pointy 2010-10-21 16:53:32

+0

哈哈! /捂臉。它是我猜想的那幾個星期之一。 – Nathan 2010-10-21 16:57:45

回答

5

你只需要一個var,使之每鏈接,像這樣:

$('a.highslide').each(function() { 
    var hsGroup = $(this).attr("rel"); 
    //^ -- add this 

    if(hsGroup.length > 1){ 
    hsGroup = hsGroup.replace(/\s/g , "-");  
    }  

    this.onclick = function() { 
    return hs.expand(this, { slideshowGroup: hsGroup }); 

    } 
}); 

沒有var你有一個全局hsGroup變量是越來越對每個循環重複使用,並且具有相同結束了,每次點擊使用的最後一個值。

或者,只是做更換在click事件發生時,像這樣:

$('a.highslide').click(function() { 
    var hsGroup = $(this).attr("rel"); 
    if (hsGroup.length > 1) hsGroup = hsGroup.replace(/\s/g , "-");  
    return hs.expand(this, { slideshowGroup: hsGroup }); 
}); 
4

那是因爲你不聲明hsGroup地方,你缺少var

var hsGroup = $(this).attr("rel"); 

否則,hsGroup是全球性的,因此設置爲最後一次迭代的值。