2012-05-14 86 views
2

我有一些代碼是當一行添加到圖表時創建一個按鈕。點擊按鈕時,我想要從圖表中刪除該行並刪除該按鈕。該示例可以查看here當它被點擊時刪除按鈕javascript

5:19這就是成功添加按鈕的代碼是:

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(); 
+3

在inspector'seriesTitle'顯示爲一個對象,它看起來像你試圖使用它作爲一個字符串。 – Musa

+0

謝謝,我現在刪除了,我認爲該字符串正在傳遞給removeLine函數,但該按鈕不被刪除。 – user578582

回答

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(); 
} 
+0

啊,偉大的東西,你提供的第一個解決方案。除了它應該是chart.series [position] .name,而不是chart.options ....非常感謝。我會在一段時間內給你打勾,但仍然存在刪除按鈕的問題。 seriesTitle被傳遞給removeLine函數,但是這個代碼$(seriesTitle).remove()並沒有刪除按鈕。 – user578582

+0

@ user578582更新 –

+0

完美!愛SO! – user578582

1

我認爲這個問題是在線路

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

seriesTitle這裏指的是創建的seriesTitle通過

var seriesTitle = category+option; 

並覆蓋其值。我猜想addSeries正在返回一個對象或undefinedseriesTitle與此值一起傳遞給removeLine,並且您將其用作數組chart.series的鍵。

嘗試去除那裏的賦值(它看起來像你不想要它),或者只是用var(它將成爲匿名函數的本地)前綴。


如果您不確定 chart.series的鍵值對,然後將它傳遞給 console.log(),您可以檢查它以查看您的密鑰應該是什麼樣子(以及這些值是什麼)。

+0

謝謝,我嘗試刪除關於刪除行的一點,現在,當我沒有錯誤,點擊按鈕時沒有任何反應。例如。 ,這什麼都不做:function removeLine(seriesTitle){$(seriesTitle).remove();}什麼也不做。 – user578582