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

変数に基づいてハイチャートで特定の行を呼び出す方法を知っている人へのボーナスポイント。たとえば、これは機能します。

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オブジェクトまたはを返していると思いますundefinedseriesTitleにこの値が渡されremoveLine、それを配列のキーとして使用していますchart.series

そこの割り当てを削除してみてください (実際には必要ないように見えます)、単に var を前に付けてください (無名関数に対してローカルになります)。


のキーと値のペアがわからない場合はchart.series、 に渡してconsole.log()調べて、キーがどのように見えるか (および値が何であるか) を確認できます。

于 2012-05-14T22:30:42.857 に答える