d3js给出typeError“d未定义”

时间:2017-08-04 09:39:54

标签: javascript d3.js

我构建了一个d3地图,并且必须访问各种操作的绑定数据。当我使用.on("mouseover",...).on("mousemove",...)执行此操作时,它可以正常工作。但我也想根据这些值设置填充颜色。当我尝试通过.attr("fill",...)和回调函数执行此操作时,它会给我一个typeError“d is undefinded”。这是一个工作和非工作的代码示例:

kommunen
    .selectAll("path")
    .data(featuresKommunen)
    .enter().append("path")
    .attr("d", path)
    .attr("class", "kommune")
    .on("mouseover",function (d){ 

        // gives me the correct values
        console.log(d.properties.AGS) 

    })

非工作:

kommunen
    .selectAll("path")
    .data(featuresKommunen)
    .enter().append("path")
    .attr("d", path)
    .attr("class", "kommune")
    .attr("fill",function (d){ 

        // gives me TypeError: d is undefined
        console.log(d.properties.AGS)

        // the same here
        console.log(d.properties)

    })

再次记录根元素

kommunen
    .selectAll("path")
    .data(featuresKommunen)
    .enter().append("path")
    .attr("d", path)
    .attr("class", "kommune")
    .attr("fill",function (d){ 

        console.log(d)
        // works and gives me a list of objects:
        // Object { type: "Feature", properties: Object, geometry: Object }
        // Object { type: "Feature", properties: Object, geometry: Object }
        // Object { type: "Feature", properties: Object, geometry: Object }
        // ...

    })

1 个答案:

答案 0 :(得分:0)

我的geojson生成了一些没有属性和坐标的对象(无论它们来自哪里......),因此它们在屏幕上不可见但在DOM中退出。在我写了一个小语句来检查是否定义了适当的语句后,它就有用了!

kommunen
.selectAll("path")
.data(featuresKommunen)
.enter().append("path")
.attr("d", path)
.attr("class", "kommune")
.attr("fill",function (d){

   // works by skipping the missing properies-values
   if (d.properties) {console.log(d.properties.AGS)}

})