2

我有一些代码在将线条添加到图表时创建一个按钮。单击按钮时,我想从图表中删除线条并删除按钮。该示例可以在这里查看。

也就是说,成功添加按钮的代码是:

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

任何知道我如何根据变量在 highcharts 中调用特定行的人的奖励积分,例如:

chart.series[chart.series.length-1].remove();

这不会:

chart.series[seriesTitle].remove();
4

2 回答 2

2

当您使用chart.series[something].remove();“某事”时,必须是意甲位置,如您在此处看到的那样。所以你必须通过参数传递位置。这就是为什么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();
}
于 2012-05-14T22:33:40.843 回答
1

我认为问题出在线条上

        seriesTitle = chart.addSeries({
            name: seriesTitle,
            data : []
        });

seriesTitle这里指的是seriesTitle创建者

var seriesTitle = category+option;

并覆盖其值。我猜那addSeries是返回一个对象或undefined. seriesTitle使用此值传递给removeLine,并且您将其用作数组的键chart.series

尝试删除那里的分配(看起来你真的不想要它),或者只是在它前面加上 var (它将成为匿名函数的本地)。


如果您不确定 的键值对,chart.series则将其传递给它console.log(),您可以检查它以查看您的键应该是什么样子(以及值是什么)。

于 2012-05-14T22:30:42.857 回答