我在处理 D3 代码中的事件处理程序时遇到问题:在重构之前,它按预期工作:
choice_groups
.append("span")
.attr("class", "repeat-choice")
.text("Modifica questa scelta")
.on("click", repeat_choice);
在单击 span.repeat-choice 元素的索引 i 参数的情况下调用了 repeat_choice() 函数。
由于我只想将此事件处理程序附加到具有多个嵌套数据元素的元素,因此我将上面的代码重构如下:
choice_groups
.each(function(d, i) {
if(d.length > 1) {
d3.select(this)
.append("span")
.attr("class", "repeat-choice")
.text("Modifica questa scelta")
.on("click", repeat_choice);
} else {
d3.select(this)
.append("span")
.attr("class", "no-choice")
.html(" ");
}
});
然而,repeat_choice() 处理函数现在总是在 i=0 时被调用,无论哪个是被点击元素的索引。
我想我没有正确使用 selection.each() :生成的标记与预期的一样(和重构之前一样),只有点击处理函数没有通过元素的索引。