2011-07-13 5 views
3

閉鎖の問題を抱えていたJavascriptをデバッグしていますが、 "event"引数を関数に渡すことができないようです。ここ は(速記で)問題です:ここに私のソリューションは、私の問題を回避するには閉鎖のトラブル:名前付きファンクションに "イベント"を渡す

//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??? 
} 

// 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" 
     } 
} 

、私は閉鎖を防ぐために、ループの外側の関数を定義した - しかし、私は合格することができませんそれに対する "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()から戻っている機能)として割り当てられている関数のパラメータとして定義する必要があります。

関連する問題