点击错误的项目使用"点击"事件在SVG圆圈上使用D3
Wrong item "clicked" when using the "click" event on a SVG circle using D3
我正在学习D3,我在使用D3和SVG创建图表时遇到了一个问题。完整的代码(但有一个子集的真实数据)可以在这里找到:http://jsbin.com/lemazefa/1/edit。
一个简化的例子可以在这里找到: http://jsfiddle.net/antoinejaussoin/G7zms/(这是一个更好的,因为它删除了围绕问题的所有不必要的代码)。
.on('click', function(d, i){
console.log('I have clicked on '+d);
data.splice(i, 1);
console.log('Data is now: '+data);
update(data);
})
我的问题是:当我点击图表上的一个圆圈时,我希望它被删除。
据我所知,在第一次单击时,单击事件返回正确的项,然后从数据数组中适当地删除,但是当我用新数据重新绑定图表时,删除了错误的圆。从那一刻起,错误的数据与所有其他圆圈联系在一起。
知道为什么会这样吗?这是D3的bug吗?或者更有可能的是,我做错了什么吗?
多谢!
没有更新删除后保留的DOM元素的属性。这是因为您正在设置输入选择项的属性,该选择项在初始追加符之后始终为空。
因此,将代码更改为: function update(data) {
var circle = svg.selectAll("circle")
.data(data);
// enter selection
circle.enter()
.append("circle")
.on('click', function (d, i) {
console.log('I have clicked on ' + d);
data.splice(i, 1);
console.log('Data is now: ' + data);
update(data);
})
// update selection
circle.attr("fill", "steelblue")
.attr("cy", 90)
.attr("cx", function (d) {
return d;
})
.attr("r", Math.sqrt);
// exit selection
circle.exit().remove();
}
更新小提琴。
相关文章:
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何更改<svg>标记为<img>用js标记
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- 锚点元素不't使用svg时,请打开EDGE上的href
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 使用onclick绘制SVG路径
- 使用“+="操作人员
- SVG/JavaScript:尝试选择和更改多边形点
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 顺时针旋转Svg元件
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- "text长度"Internet Explorer中svg文本元素悬停时的更改
- 使用Canvg将svg转换为png:"target.childnodes未定义“;错误
- svg.js的奇怪行为;animate().move()"在Firefox中