我正试图动态添加矩形点击事件。目标是一旦我点击一个矩形,将添加额外的文本行。在点击事件时动态添加矩形
我曾尝试使用下面的脚本:
svg.append("rect")
.attr("x", 0)
.attr("y", 31)
.attr("width", 250)
.attr("height", 30)
.attr("fill", "rgb(82,82,82)")
.attr("stroke-width", 0)
.on("click",function()
{
MyDataSource= dataset.filter(function(d) {
return d.Topic== "MyTopic";
});
console.log("Button clicked");
var topics = svg.selectAll("g")
.data(MyDataSource)
.enter()
.append("g")
.attr("class","bar");
var rects = topics.append("rect")
.attr("y", function(d, i) {
return (i+2) * 31;
})
.attr("x", 0)
.attr("width", 250)
.attr("height",30)
.attr("fill", "rgb(8,81,156)")
.attr("stroke-width",0)
.append("title")
.text(function(d) {
return d.Topics;
});
var recttext = topics.append("text")
.attr("y", function(d,i) {
return (i+2)*31+20;
})
.attr("x", 150)
.text(function(d) {
return d.Topics;
}) ;
});
一旦我对矩形点击,控制台将有“按钮点击”但什么都不会发生在页面上。
如果我拿掉Onclick函数中的脚本并将其添加到页面默认代码中,那么当页面首次加载时,行将被成功添加。
如何设置此代码在点击事件中正常工作?
在此先感谢
谢谢您的回复gmferland。就我而言,即使在第一次单击事件中,MyDataSource的数据也不会显示。我已更新我的代码以显示如何填充MyDataSource。 感谢您对.datum提供更清晰的代码的建议,我会看看它并尝试实现它。 – SDB17
只需复制代码并将MyDataSource更改为用于调试目的的简单数组,我在第一次单击时就会看到矩形。这让我觉得这个问题可能与MyDataSource的填充方式有关。你的d3特定的代码看起来很好 – gmferland