Javascript 未捕获错误:未定义容器-Google图表

Javascript 未捕获错误:未定义容器-Google图表,javascript,charts,google-visualization,Javascript,Charts,Google Visualization,我正在尝试加载一个谷歌图表,得到以下答案: 未捕获错误:未定义容器 我已经阅读了关于谷歌图表这条消息的其他问题,最常见的问题似乎是getElementById是否工作不正常 然而,我不认为这是我的问题,或者至少不是其他人的问题 这是我的谷歌图表代码: google.load('visualization', '1.0', {'packages':['gauge']}); google.setOnLoadCallback(drawChart); function drawChart() {

我正在尝试加载一个谷歌图表,得到以下答案:

未捕获错误:未定义容器

我已经阅读了关于谷歌图表这条消息的其他问题,最常见的问题似乎是getElementById是否工作不正常

然而,我不认为这是我的问题,或者至少不是其他人的问题

这是我的谷歌图表代码:

google.load('visualization', '1.0', {'packages':['gauge']});

google.setOnLoadCallback(drawChart);

function drawChart() {
        var data = google.visualization.arrayToDataTable([
            ["Label", "Value"],
            ["Match", state.greens[0].score]
        ]);

        var options = {
            redFrom: 90, redTo: 100,
            yellowFrom: 75, yellowTo: 90,
            minorTicks: 5
        };

        var chart = new google.visualization.Gauge(document.getElementById("chart-div"));
        chart.draw(data, options);

        setInterval(function() {
            data.setValue(0, 1, 40 + Math.round(60 * Math.random()));
            chart.draw(data, options);
            }, 13000);
};
这几乎是谷歌在其量表参考中的直截了当的内容:

我只是想用他们文档中最简单的例子,用我的数据生成一张图表

以下是我的html:

<div class="row">
                <div class="col-md-6 col-md-offset-3">
                    <div class="chart-div">
                    </div>
                </div>
            </div>
我将javascript放在一个单独的文件中,并将api加载到html文件的头部

我缺少什么?

document.getElementByIdchart-div查找id设置为chart-div的元素。您的div正在使用class属性而不是id属性。改为


或者,您也可以执行document.getElementsByClassName'chart-div'[0],其中0是所需元素的序号。这种方式可能是首选,因为您可以在一个页面上发布多个图表;但请注意,IE-9之前的旧浏览器不支持GetElementsByCassName,前面的答案也不支持GetElementsByCassName。您仍然可以将其作为一个类,但要:

document.querySelector(".chart-div");
或者,如果您希望获得更多支持:

var elems = document.layers || document.all || document.getElementsByTagName("*");
//          Netscape           < IE 6          All Other
for (var i = 0; i < elems.length; i += 1) {
    if (elems[i].className === 'chart-div') {
        // Do something with those elements
    }
}

我认为这支持Netscape 5,但不要让我这么认为。

你的意思是脚本没有正确读取引导css吗?我明白了。是的,确实使用了引导容器。很好的回退。是否确定document.layers获取所有元素?我不记得了,但我觉得它就像是z索引和帧的混合体。如果没有使用任何元素,它可能会找到所有元素?@vol7ron我不确定document.layers是否会找到所有元素,或者它是否包含所有层Netscape div等效标记。我最初是从一本旧书1996年、1998年学习HTML和JavaScript的?我不确定哪一个从未提到过div。如果有人碰巧在使用Netscape,大多数网站看起来都会很奇怪——可视化不会是什么大问题——这一定是一本相对古老的书。div和span是真正深入理解内联与块显示概念的元素,帮助人们从基于表格的布局过渡。它们还帮助实现了我们在CSS中看到的改进。使用.getElementsByClassName'chart-div'[0]是否是在同一页面上加载多个图表的唯一方法?如果是这样,那就太差劲了。在同一页面上使用getElementById调用google.charts.SetOnLoadCallbackDrawageChart和google.charts.SetOnLoadCallbackDrawageChart时,我收到了相同的“未捕获错误”,尽管它们都有自己的唯一ID。按你的方式做是可行的,但谷歌图表似乎也应该提供标准的方法。好的,NM,我发现了一个我不知道的问题-使用谷歌文档示例中提到的div符号是不可行的。你必须使用。。。然后您可以装载多个容器。仅供参考。