У меня есть раздел кода d3 с html.
var div = d3.select("body")
.append("div")
.attr("id", "mouseover")
.attr("class", "decisionMenu")
.style("opacity", 1)
.html('
<button type = "button" onclick = "doFunction();">Click Me</button>')
doFunction определяется следующим образом:
function doFunction() {
console.info("decision button click");
}
Я хотел бы вызвать doFunction в обратном вызове onclick для кнопки. однако компилятор не может найти doFunction, поскольку html находится в строке. как сделать вызов функции при нажатии кнопки?
редактировать (я не включал это раньше):
У меня есть функция, вызываемая из другой функции:
function showDecisionMenu(d) { var g = d3.select(this);
var div = d3.select("body")
.append("div")
.attr("id", "mouseover")
.attr("class", "decisionMenu")
.style("opacity", 1)
.html('<button type = "button" onclick = "doFunction();">Click Me</button>')
звонил отсюда:
nodeEnter.on("mouseover", showDecisionMenu)
Я изменил его на одну строку, но он все равно не работает
@ mjpablo23 это так: jsfiddle.net/szygdv9. Я голосую за закрытие.
мм понятно. позвольте мне отредактировать его, чтобы показать вызывающие его функции.
Он все еще работает: jsfiddle.net/bedw17vy
ах хорошо, это работает сейчас. Мне пришлось изменить контекст, в котором я определил doFunction. Благодарю.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Поскольку вы все равно используете d3, вы можете остаться в d3 и для этого:
var div = d3.select("body")
.append("div")
.attr("id", "mouseover")
.attr("class", "decisionMenu")
.style("opacity", 1);
div.append('button')
.attr("type", "button")
.text("Click Me")
.on("click", doFunction);
есть ли документация о том, какие элементы я могу добавить в d3, используя этот формат? Я также хотел бы добавить выпадающее меню.
d3 использует appendChild за кулисами, поэтому я не знаю ни одного элемента dom, который вы не можете добавить с помощью d3. Вы, безусловно, должны быть в состоянии сделать выпадающее меню.
Переместите кнопку на одну строку. У вас есть многострочная строка, но она будет работать только с обратными кавычками. Если вы сделаете
.html('<button type = "button" onclick = "doFunction();">Click Me</button>'), функция должна работать нормально.