2 回答

TA貢獻1765條經(jīng)驗 獲得超5個贊
我是一名 D3 程序員,我必須說,在這些年里,我從未見過一個使用您聲稱是您唯一見過的方法的 D3 代碼,即設置onclick屬性:
selection.attr("onclick", "foo()")
它確實有效,但這不是慣用的 D3。在 D3 中,我們使用該on方法。但是,您的第一個片段的問題在于它立即調(diào)用該函數(shù):
d3.select("body")
.append("button")
.html("Click me")
.on("click", console.log("you clicked me"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
可以看到控制臺顯示“you clicked me”沒有任何點擊。所以,為了讓它起作用,我們不應該調(diào)用這個函數(shù)。有趣的是,console.log接受 3 個參數(shù),看看如果我們不調(diào)用會發(fā)生什么console.log:
d3.select("body")
.append("button")
.html("Click me")
.on("click", console.log);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
現(xiàn)在console.log,當您單擊按鈕時可以使用,因為您將它作為函數(shù)引用傳遞。但是,第一個值是undefined因為您沒有將任何字符串傳遞給console.log.
話雖如此,你想要的是:
d3.select("body")
.append("button")
.html("Click me")
.on("click", () => {
console.log("you clicked me")
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
現(xiàn)在您正在向click事件傳遞一個適當?shù)暮瘮?shù),當您單擊時將調(diào)用該函數(shù)。

TA貢獻1876條經(jīng)驗 獲得超5個贊
當您:
some_div_selection.append("button").text("+").on("click", function(){console.log("You clicked me")});
添加回答
舉報