Вместо использования attr("onclick", something)
, который немедленно вызовет функцию, установите прослушиватель событий, используя selection.on
:
var something = function() {
console.log("do something");
}
d3.select("body")
.append("button")
.text("Button Text")
.on("click", something);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
Чтобы вы поняли, почему something
был вызван в вашем коде, даже если у него нет скобок (например, something()
), документация для selection.attr
объясняет, что:
[...] если значение является функцией, оно оценивается для каждого выбранного элемента.
сказал, что вы оцениваете функцию (и, следовательно, регистрируете сообщение в консоли). Также имейте в виду, что ваша функция возвращает undefined
, и поэтому вы не добавляете никаких атрибутов.