Что вызывает следующую ошибку TypeError?
TypeError: callback is undefined
Мой код выглядит так:
<script>
var svg = d3.select("body").append("svg")
.attr("width", 500)
.attr("height", 500)
.call(drag)
var drag = d3.drag()
.on("start", start)
function start(d){
};
</script>
@GerardoFurtado Хороший плагин! Не могли бы вы поделиться более подробной информацией? Могу ли я выступить в роли бета-тестера? Передайте d3.drug, так сказать ...
d3.drug будет плагином, настолько полным анти-шаблонов и бессмысленных фрагментов, что пользователи быстро поймут выбор имени ...



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


Вы не установили значение drag во время его использования, поэтому он принимает значение по умолчанию, undefined.
var svg = d3.select("body").append("svg")
.attr("width", 500)
.attr("height", 500)
.call(drag)
Это связано с тем, что объявление drag (var drag) поднято в начало кода. Вы можете решить проблему, установив значение drag перед его использованием:
var drag = d3.drag()
.on("start", start)
var svg = d3.select("body").append("svg")
.attr("width", 500)
.attr("height", 500)
.call(drag)
function start(d){
};
@Downvoter, расскажите, что не так с этим ответом.
Я не голосовал против этого, но ваше предположение об использовании start() неверно. Эта функция не является частью проблемы; это правильный способ создать обработчик перетаскивания в D3 и зарегистрировать прослушиватель, а именно start(d) для начального события. Думаю, это и стало причиной голосования против. Тем не менее, ваше первое предположение о том, что объявление var drag поднимается, пока назначение выполняется после использования в .call(drag), является точным и истинной причиной ошибки. Я предлагаю вам удалить вторую часть вашего сообщения и вместо этого добавить фрагмент с исправленным кодом.
@altocumulus Жаль, что вы его редактировали, мне очень нравился
d3.drug... На самом деле, это может быть название нового плагина, который я напишу ...