8

現在、d3 ビジュアライゼーションのマウス クリック イベント処理を行っています。

fooCircle.on("click",fooFunction("barParameter"));

私の問題は、要素をクリックしなくても関数が実行されることです。これは、関数内に print ステートメントを入れているためです。

興味深いことに、関数をパラメーターを受け取る関数に変更しないと、関数は本来の動作をします。つまり、適切な要素をクリックすると実行されます。

fooCircle.on("click",fooFunction);
4

2 に答える 2

10

誰かが私の問題を手伝ってくれました。解決策は次のとおりです。

fooCircle.on("click", function () {fooFunction("barParameter"); });

このように、関数の結果ではなく、関数が on 関数に渡されます。

于 2012-11-20T23:46:55.347 に答える
6

fooFunctionはい、クリック ハンドラーをサブスクライブしている場所で呼び出しているためです。

fooCircle.on("click",fooFunction("barParameter"));// Calls fooFunction with param "barParameter"

その時点で、関数を呼び出したばかりなので、console.log が表示されます。

さらに、あなたfooFunctionは何も返さないと仮定します。つまり、本質的には を返しますundefined。したがって、サブスクリプションは基本的に次のようになります。

fooCircle.on("click", undefined);// Nothing will happen since there's no handler

これが、2 番目のコード スニペットが正常に機能する理由です。後で呼び出す関数を提供しているためです。

疑問が残りますが、 の意味は"barParameter"何ですか? クリック時にハンドラーを呼び出すときにd3が提供するものfooFunction以外dに、他のパラメーターを渡す必要がありますか?i

于 2012-11-20T23:43:14.800 に答える