我目前做的鼠標點擊事件處理我的D3可視化:d3.js的「單擊」事件處理運行功能,無需點擊事件
fooCircle.on("click",fooFunction("barParameter"));
我的問題是,該功能,而無需我跑了點擊元素。我知道這是因爲我在函數中放置了打印語句。
有趣的是,當我改變了功能,不是一個函數,它在任何參數,函數的行爲有它應該,這意味着,當我點擊相應的元素上它就會跑:
fooCircle.on("click",fooFunction);
我目前做的鼠標點擊事件處理我的D3可視化:d3.js的「單擊」事件處理運行功能,無需點擊事件
fooCircle.on("click",fooFunction("barParameter"));
我的問題是,該功能,而無需我跑了點擊元素。我知道這是因爲我在函數中放置了打印語句。
有趣的是,當我改變了功能,不是一個函數,它在任何參數,函數的行爲有它應該,這意味着,當我點擊相應的元素上它就會跑:
fooCircle.on("click",fooFunction);
是,因爲你在這個地方叫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
這就是爲什麼第二個代碼片段按照它應該工作的原因;因爲你提供了一個函數來稍後調用。
雖然問題仍然存在,"barParameter"
有什麼意義?您是否需要將其他參數傳遞到fooFunction
- d
和i
以外,d3在點擊時調用處理程序時會提供哪些參數?
有人幫我解決了這個問題。解決的辦法是做:
fooCircle.on("click", function() {fooFunction("barParameter"); });
這樣,一個函數傳遞到功能上,而不是一個函數的結果。
我想我可以用d代替「barParameter」,如果我通過使用基準,數據或輸入函數給元素提供必要的信息。目前在我的D3代碼中,有問題的元素沒有上述信息。無論哪種方式都很好。這取決於人們如何認爲代碼可讀性更清晰。 –
@meetamit你的答案提供了有用的信息。我也有同樣的問題。如果我採用相同的代碼片段,是的,我需要將某個變量傳遞給'fooFunction'。我怎樣才能做到這一點? – RAS
@RAS我認爲tmnt-rafael的回答如下,解答你問的問題。如果你想更有趣,你可以閱讀[部分應用功能](http://raganwald.com/2013/03/07/currying-and-partial-application.html)。 – meetamit