我有一些代码,当一行添加到图表时创建一个按钮。单击该按钮时,我想从图表中删除该行并删除该按钮。可以查看该示例here。
即,成功添加按钮的代码是:
function getChartData(option){
var category = $('#category').val();
var option = option.value;
var seriesTitle = category+option;
$.ajax({
url: "getData.php?action=getChartData",
type: "GET",
dataType:"json",
data: {
category:category,
option:option
},
success: function(json){
chart.addSeries({
name: seriesTitle,
data : []
});
$.each(json.Data,function(){
chart.series[chart.series.length-1].addPoint([parseFloat(this.Year), parseFloat(this[option])]);
});
}
});
var series = document.createElement('button');
series.onclick = function(){
removeLine(seriesTitle);
}
series.setAttribute('id',seriesTitle);
series.innerHTML=seriesTitle;
$('#removeLine').append(series);
}
然后单击该按钮时,此代码不执行任何操作:
function removeLine(seriesTitle){
chart.series[seriesTitle].remove();
$(seriesTitle).remove();
}
错误是:
Uncaught TypeError: Cannot call method 'remove' of undefined
removeLine oil.js:172
series.onclick
任何知道如何根据变量调用高图中特定行的人的加分点,例如:这有效:
chart.series[chart.series.length-1].remove();
这不是:
chart.series[seriesTitle].remove();
答案 0 :(得分:2)
当你使用chart.series[something].remove();
时,'某些'必须是系列位置,因为你可以看到 here 。所以你必须传递位置thrue参数。这就是chart.series[0].remove();
工作的原因。
因此,如果你想解决这个问题,你可以在删除之前根据标题找到系列位置,如下所示。
function removeLine(seriesTitle){
for(var postion = 0; position < chart.options.series.length; position++) {
if(chart.options.series[position].name == seriesTitle) {
chart.options.series[position].remove();
break;
}
}
}
或
function removeLine(seriesTitle){
$.each(chart.options.series, function(pos, serie){
if(serie.name == seriesTitle) {
chart.series[pos].remove();
}
});
}
要解决此问题,请在删除按钮时添加哈希标记,如下所示:
$('#' + seriesTitle).remove();
因此,您的功能如下:
function removeLine(seriesTitle){
for(var postion = 0; position < chart.options.series.length; position++) {
if(chart.options.series[position].name == seriesTitle) {
chart.options.series[position].remove();
break;
}
}
$('#' + seriesTitle).remove();
}
答案 1 :(得分:1)
我认为问题在于
seriesTitle = chart.addSeries({
name: seriesTitle,
data : []
});
seriesTitle
这里指的是
seriesTitle
var seriesTitle = category+option;
并覆盖其值。我猜想addSeries
正在返回一个对象或undefined
。 seriesTitle
会使用此值传递给removeLine
,并且您将其用作数组chart.series
的键。
尝试删除那里的赋值(它看起来确实你不想要它),或者只是用var作为前缀(它将成为匿名函数的本地)。
<小时/> 如果您不确定chart.series
的键值对,请将其传递给console.log()
,然后您可以检查它以查看您的键应该是什么样的(以及值是什么)。