2010-07-02 93 views
2

參數我有這樣的功能:附加功能與JavaScript的

function addButtonLookup() { 

    var element = document.getElementById("btnToolBar"); 
    var index; 
    for (var i = 0; i < lookupArray.length; i++) { 

     index = i; 

     var btn = document.createElement('input'); 
     btn.type = 'button'; 
     btn.value = '' + lookupArray[i]; 
     btn.name = 'btnLookup' + i; 
     btn.id = i; 
     btn.className = 'CommonButtonStyle'; 
     element.appendChild(btn); 
     btn.onclick = function() { 
      debugger; 

      tblExcpression.WriteMathElement(lookupArray[i], lookupArray[i]); 
     }; 


    } 

} 

onbutton點擊我不確定

+0

典型的錯誤。請參閱 [傻瓜的JavaScript閉包](http://blog.morrisjohns.com/javascript_closures_for_dummies.html),示例5。 – 2010-07-02 11:20:20

回答

2

取而代之的是:

btn.onclick = function() { 
    debugger; 

    tblExcpression.WriteMathElement(lookupArray[i], lookupArray[i]); 
}; 

試試這個:

btn.onclick = (function(i) { 
    return function() { 
     debugger; 
     tblExcpression.WriteMathElement(lookupArray[i], lookupArray[i]); 
    } 
})(i); 

問題與第一個版本是從當前範圍複製變量i。然而,在當前範圍內(它是for循環的一部分)變量會有所不同,這就是爲什麼你會得到這種奇怪的行爲。

通過傳遞變量作爲paremeter到一個新的功能(如第二個例子)的當前變量被複制。

你應該看看Closure如何在JavaScript中工作。