2 回答

TA贡献1765条经验 获得超5个赞
我是一名 D3 程序员,我必须说,在这些年里,我从未见过一个使用您声称是您唯一见过的方法的 D3 代码,即设置onclick属性:
selection.attr("onclick", "foo()")
它确实有效,但这不是惯用的 D3。在 D3 中,我们使用该on方法。但是,您的第一个片段的问题在于它立即调用该函数:
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”没有任何点击。所以,为了让它起作用,我们不应该调用这个函数。有趣的是,console.log接受 3 个参数,看看如果我们不调用会发生什么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>
现在console.log,当您单击按钮时可以使用,因为您将它作为函数引用传递。但是,第一个值是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>
现在您正在向click事件传递一个适当的函数,当您单击时将调用该函数。

TA贡献1876条经验 获得超5个赞
当您:
some_div_selection.append("button").text("+").on("click", function(){console.log("You clicked me")});
添加回答
举报