2017-03-01 9 views
0

「createTextButton」をクリックすると、「currentTool」はそのボタンに関連付けられた関数に切り替わります。次に、誰かが描画面をクリックすると、currentToolに割り当てられた関数はaddEventListenerによって呼び出されますが、そうではありません。addEventListenerはその関数を使用していません

ここに何か不足していますか? Mozillaのドキュメントによれば、AddEventListenerは2番目のパラメータとしてオブジェクトまたは関数を受け取ることができます。 Node.JSでは、このようなコールバックを常に使用しています。ここに何か違うものはありますか?

var currentTool = null; 

var svg = document.getElementById("drawing-surface"); 

var createTextButton = document.getElementById("createTextButton"); 

createTextButton.addEventListener("mouseup", function(event) { 
    currentTool = createText; 
}); 

svg.addEventListener("mouseup", currentTool); 

function createText(event) { 
    ... 
} 
+0

"createText"はどこで定義しましたか? –

答えて

3

あなたはsvg.addEventListenernullを渡しています。与えられた値は、関数がと呼ばれる時点の変数の値です。後で変更された場合、それは何にも影響しません。あなたが望むものを達成するために

、あなたは別の関数にイベントリスナーをラップすることができます

svg.addEventListener("mouseup", function(event) { 
    if(currentTool != null) 
    currentTool(event); 
}); 

今、我々は変数currentToolにイベントがaddEventListenerがあるだけの代わりに起こるたびに参照するので、これは動作しますと呼ばれる。

関連する問題