2012-03-01 4 views
1

次のようにすると、イベントリスナーが追加された時点で変数の値が必要な添付イベントリスナーに変数が渡されます。イベントリスナーでJavascriptのパス値が機能する

foo=a;  
document.addEventListener('mousedown', function() { doSomething(foo) }, false); 
foo=b; 

doSomething(val){ 
alert(val); 
} 

したがって、「b」ではなく「a」を警告する必要があります。

+0

どのイベントリスナーが追加されたときに値のコピーを作成する方法について? –

+0

多くのボタンが作成されるので、静的でなければなりません。 – user1209203

+0

スクリプトは、ユーザがクリックするまでにfooが既に値 "b"を持っているので、 "b"を警告し、 "a"ではなく警告するときには正しいです。 addEventListenerで何が得られたのですか?そのイベントに関数を割り当てているので、イベントがトリガされたときに関数が実行されます – Liviu

答えて

7

のようなもの:

var foo = 'a';  

document 
.getElementById('foo') 
.addEventListener('click', function(bar) { 

    // return the actual event handler function 
    return function() { 
    doSomething(bar); 
    }; 

}(foo) /* <-- call the anonymous function, passing in the current foo*/, false); 

foo = 'b'; 

function doSomething (val) { 
    alert(val); 
}​ 

デモhttp://jsfiddle.net/gS9wu/1/

+0

あなたのためにすごいスター! – user1209203

0

fooはグローバルなので、イベントが検出される前に3行目にfooが上書きされます。

あなたはfooの値を取得し、オブジェクトの上またはプラグインでそれを保存するか、離れてあなたの通常のコードフローから抽象化と同様またはコールバック関数にそれを渡すために検討する必要があります。

文書を。 addEventListener( 'mousedown'、(function(outerFoo){doSomething(outerFoo);})(foo)、false);

関連する問題