You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C3JS饼图点击功能正常,柱状图点击触发Uncaught TypeError: Cannot read properties of undefined (reading 'getItem')错误的问题求助

问题原因与解决方案

我之前也碰到过C3 0.4.8版本的这个坑!你遇到的Cannot read properties of undefined (reading 'getItem')错误,是因为这个早期版本的C3在处理柱状图(bar类型)的onclick事件时存在内部逻辑bug:当点击柱状图元素时,C3的内部代码尝试调用一个未被正确初始化的对象的getItem方法,而饼图的点击事件逻辑是独立实现的,所以没有触发这个问题。

下面给你两种可行的解决方案,按需选择:

方案1:升级C3到稳定新版本(推荐)

这个bug在C3后续的版本(比如0.7.x及以上)已经被修复了,升级是最彻底的解决办法。你只需要替换HTML里的C3和对应兼容的D3依赖即可:

<!-- 替换成新版本的依赖 -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/c3/0.7.20/c3.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.16.0/d3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/c3/0.7.20/c3.min.js"></script>
<div id="myChart"></div>
<div id="myChart2"></div>

升级后,你原来的代码不需要做任何改动,柱状图的onclick事件就能正常触发,不会再出现那个错误。

方案2:不升级版本,改用D3绑定点击事件

如果你因为某些原因不能升级C3版本,可以绕过C3自带的onclick配置,直接用D3给柱状图元素绑定点击事件:
修改你生成柱状图的代码:

c3.generate({
    bindto: "#myChart2",
    legend: {
        show: false,
    },
    axis: {
        x: {
            type: "category",
        },
    },
    data: {
        columns: data2,
        type: "bar"
        // 这里去掉原来的onclick配置
    },
});
// 用D3手动绑定点击事件
d3.select("#myChart2").selectAll(".c3-bar").on("click", function(d) {
    console.log(d);
    myFunction(d);
});

这种方式直接通过底层的D3来处理点击事件,避开了C3内部的bug逻辑,同样能实现你需要的功能。

另外,如果你临时需要快速规避错误,也可以在原来的onclick回调里用try-catch包裹逻辑,不过这种方式只是掩盖错误,不是根本解决办法,不推荐长期使用:

onclick: function(event2) {
    try {
        myFunction(event2);
    } catch(e) {
        console.log("处理点击事件:", event2);
        // 可以在这里添加自定义的错误处理逻辑
    }
}

内容的提问来源于stack exchange,提问作者makaMa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 19:32:29