2009-09-01 88 views
0

如何傳遞參數給一個jQuery迭代函數(或任何他們是所謂的),如:jQuery的迭代器功能參數

var states = new Array(); 
    states.push(true); 

    $(children).each(function(states) { 
     if(this.depth>states.length) 
     { 
      states.push(this.collapsed); 
     } 
     else if (this.depth<states.length) 
     { 
      states.pop(); 
     } 

     var collapsed=states[states.length-1]; 
    } 
    ); 

的「狀態」參數到達無論是作爲一個int或一個布爾值,從來沒有數組。建議?我不想將狀態聲明爲全局狀態。 (上面的代碼駐留在方法內部)。

回答

3

該代碼可以使用states作爲閉包;你可以在本地聲明states到父方法,然後從你傳遞給each的匿名函數中引用它。事實上,在沒有任何其他錯誤,我沒有看到,你可以只改變

$(children).each(function(states) { 

$(children).each(function() { 

,它會工作,沒有一個全球性的。

2
getEachCallback = function(states) { 
    return function() { 
    if(this.depth>states.length) 
    { 
     states.push(this.collapsed); 
    } 
    else if (this.depth<states.length) 
    { 
     states.pop(); 
    } 

    var collapsed=states[states.length-1]; 

    }; 
}; 

$(children).each(getEachCallback (states)); 
+0

不要忘了分號您的變量聲明的結束和return語句(第二行和第三行)或JSLint會傷害你的感受;)我喜歡state變量的'stackwise'聲明。 – 2009-09-01 18:54:06

+0

@DDaviesBrackett:什麼是JSLint?你的意思是getEachCallback = function(states){return function(){};}; ??? – 2009-09-01 18:59:26

+0

是的,這就是我的意思 - jslint是www.jslint.com,它是一種消毒JS的機制,因此您不會意外地將自己拍攝在腳下。 – 2009-09-04 17:48:12

0

$ .each()函數的參數不是數組本身,而是當前項目的索引。如果你推動並彈出你不需要,那麼完全忽略參數。

國家將提供給內部匿名函數,因爲它是一個封閉,所以你應該罰款變更功能(州)至()的函數