2012-01-19 20 views
1

まず、どこかここで回答しなければならない何かを尋ねるための謝罪は(私が見てきた!)私はこれをしたいローカル変数とonclickの呼び出し

var i; 
for (i = 0; i < 5; i++) { 
    ... 
    // Add an anchor to the dom 
    ... 
    a.onclick = goog.bind(this.doSomething, this); 
    ... 
} 

namespace.Clazz.prototype.doSomething = function(event, index) { 
    console.log('index: ' + index); 
} 

を私は5つのアンカーたいですclickイベント(clickイベントと一緒に)をクリックすると、それぞれidoSomethingの異なる値が渡されます。私はまたthisの文脈をdoSomething(したがってバインド)に保ちたいと思います。

答えて

1

あなたは引数が受信される順序を逆にすることができた場合は、あなたがこれを行うことができるはず...

a.onclick = goog.bind(this.doSomething, this, i); 

だからあなたdoSomethingは次のようになります...

namespace.Clazz.prototype.doSomething = function(index, event) { 
    console.log('index: ' + index); 
}; 

少なくともそれはthe Google Closure Library sourceから見えます。

+0

恐ろしく、ありがとう! –

+0

@BenFlynnようこそ。 –

1
a.onclick = (function(i) { return function() {goog.bind.....}; })(i); 

これは、iの値が固定された新しいクロージャを作成します。

+0

私がしている場合:a.onclick =(function(i){goog.bind(this.doSomething、this));})(i); a.onclickはnullを終了しています... –

+0

申し訳ありませんが、私は少し噛み合って - 編集させてください。 –

+0

あります。関数(i)は、onclickハンドラになる関数を返す必要があります。 –

1

このような何かがあなたのために良い仕事があります。

a.onclick = function() { 
    doSomething(this, i) 
} 
+0

ループの継続に伴い、 'i'の値が変更されます。 –

関連する問題