8

我有一个奇怪的问题,希望你能帮助我。

我在开发网站上运行了Highcharts——我使用一个简单的表单来允许用户输入数据。

在同一页面上,一旦输入数据,就会显示一个 Highchart。

数据输入表单具有非常简单的基于 jQuery 的片段,例如。表单验证,最大字符数计数器等。

发生的情况是,当数据库中有图表数据时,图表会正确绘制,并且当您尝试输入新数据点时,剩余的 JS 片段会按预期工作。

但是如果数据库中没有数据(因此没有显示 Highchart),我所有的 JS 片段都会停止工作。

在 Firebug 控制台上,当没有数据形成图表时出现此错误:

jb is null
function n(m,h){kc=ya(a.title,m);tc=ya...play:""});Aa.body.appendChild(Qb)}Tc=
highcharts.js (line 47)

在 Chrome 上,另一个错误显示为

Uncaught TypeError: Cannot set property 'innerHTML' of null
d.d.extend._Deferred.f.resolveWith         jquery.min.js:16
d.d.extend.ready                           jquery.min.js:16
d.c.addEventListener.A

同样,一旦我输入第一个数据点并形成图表,这些错误就会消失。

有谁知道发生了什么以及当 Highchart 为空时如何让我的 JS 工作?

任何指针都非常感谢。谢谢!

4

3 回答 3

8

对我来说,问题是在包含 HighCharts 之前我没有包含 jQuery。

<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/highcharts-more.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

抛出错误:

未捕获的类型错误:无法读取未定义的属性“addEvent”(匿名函数)@ highcharts.js:313(匿名函数)@highcharts.js:315(匿名函数)@highcharts.js:331

未捕获的类型错误:n.getOptions 不是函数(匿名函数)@highcharts-more.js:8(匿名函数)@highcharts-more.js:55

未捕获的类型错误:无法读取未定义(匿名函数)@exporting.js:9(匿名函数)@exporting.js:24 的属性“fireEvent”

但如果我首先包含 jQuery,它没有。

于 2015-10-23T01:29:59.603 回答
7

我有这个问题。我不得不用 document.ready 包围 highChart 创建代码

$(document).ready({
   chart = new Highcharts.Chart({ //my cool chart 
   });
});
于 2011-06-02T23:24:01.627 回答
2

好的,这个错误再次弹出,那是因为我上面的评论并没有真正解决它。

这是罪魁祸首:如果你有一个为图表生成数据的模型碰巧返回一个空数组(假设它是一个新用户,她还没有向数据库添加任何数据),这个空数组被传递给控制器​​——然后将空数组传递给带有 Highcharts 的视图。

当将一个空数组传递给我的包含 Highcharts 的视图时,Highcharts 会运行,但不会找到注入图表的元素,因为我在视图中还有一个条件,#container如果没有数据则删除。

如果没有将图表放在哪里,Highcharts 会返回一个innerHTML错误,这可能会也可能不会破坏您剩余的 javascript(我的情况)。

这里的解决方案与 JS 无关,但实际上是在我的控制器中放置一个条件,该条件将是伪代码:

if model that generates chart data returns empty array
    don't generate view containing Highcharts
else
    generate view containing Highcharts

这样做不仅可以永久避免错误,还可以减少在没有数据时运行 Highcharts 的开销。

于 2011-11-15T02:03:07.527 回答