2011-07-13 35 views
3

我正在調試一些Javascript,它遭受了一點關閉麻煩 - 但似乎無法將「事件」參數傳遞給該函數。 這裏的問題(速記):關閉麻煩:將「事件」傳遞給命名函數

// let's say links.length == 3 
for(var i = 0; i < links.length; i++){ 
     links[i].onclick = function(e){ 
      alert(i); //closure! all links alert "3" 
      // do something with "e" 
     } 
} 

這裏是我的解決方案

//workaround 

// define function outside of loop 
function outer(e,i){ 
    return function(){ 
     alert(i); //closure! all links alert "3" 
     // do something with "e" 
    } 
} 

for(var i = 0; i < links.length; i++){ 
     links[i].onclick = outer(e,i); //uh oh! e = undefined??? 
} 

在我的解決辦法,我已經定義了一個函數的循環,防止關閉外 - 但我無法通過「e」的說法。有人能指引我朝着正確的方向嗎?

回答

4

在返回的函數中定義它。

function outer(i){ 
     // ------------v-- event object is passed when this function is invoked 
    return function(e){ 
     alert(i); 
    } 
} 


for(var i = 0; i < links.length; i++){ 
     links[i].onclick = outer(i); 
} 

event對象被傳遞當事件發生時,因此需要將其定義爲一個參數與在最終分配爲處理程序(你從outer()返回函數)的功能。