2011-11-06 95 views
4
所有的「系列」

不是真的知道發生了什麼與我的代碼,但我無法刪除所有一系列highcharts我鑽到了。當我調用resetChart函數時,它只能刪除4個系列中的2個,我設置了一個臨時警報來告訴顯示它的刪除內容,並且它僅警告2個系列。無法刪除highcharts

然而,當我刪除行chart.series[i].remove();警報的所有工作4。 我試過幾種循環數組的方法,即使把它放在相反的位置,但它沒有區別。

如果將下面的代碼複製到的jsfiddle你會明白我的意思

HTML

<div id="container" style="height: 400px; min-width: 600px"></div> 
<script type="text/javascript" src="http://www.highcharts.com/js/testing-stock.js"></script> 
<script type="text/javascript" src="http://www.highcharts.com/samples/data/usdeur.js"></script> 

JQuery的

$(function() { 
var chart; 

var colors = Highcharts.getOptions().colors, 
    categories = ['October', 'November'], 
    name = 'Monthly', 
    data = [{ 
     y: 22, 
     drilldown:[{ 
      name: 'Income', 
      data: [12, 0], 
      categories: ['Income', 'Expenses'] 
     }, { 
      name: 'Expenses', 
      data: [0, 5] 
     }, { 
      name: 'Employee', 
      data: [0, 3] 
     }, { 
      name: 'Tax Office', 
      data: [0, 1] 
     }] 
    }, { 
     y: 21 
    }]; 
function setChart(drilldown) { 
    $.each(chart.series, function(i, val) { 
     val.remove(); 
    }); 
    if(drilldown) { 
     chart.xAxis[0].setCategories(drilldown[0].categories); 
     $.each(drilldown, function(i, val) { 
      chart.addSeries({ 
       name: val.name, 
       data: val.data 
      }, false); 
     }); 
    } 

    chart.redraw(); 
} 
function resetChart() { 
    //chart.toolbar.remove('RESET'); 
    $.each(chart.series.reverse(), function(i) { 
     alert('removing :' + chart.series[i].name); 

     // IF I REMOVE THE BELOW LINE, ALL ALERTS DISPLAY CORRECTLY 
     chart.series[i].remove(); 
    }); 

    chart.xAxis[0].setCategories(categories); 
    chart.addSeries({ 
      name: name, 
      data: data 
    }); 
    chart.redraw(); 
} 

chart = new Highcharts.Chart({ 
    chart: { 
     spacingLeft: 5, 
     spacingRight: 5, 
     spacingBottom: 5, 
     renderTo: 'container', 
     type: 'column' 
    }, 
    title: false, 
    xAxis: { 
     categories: categories 
    }, 
    yAxis: { 
     title: false, 
     labels: { 
      formatter: function() { 
       str = '$' + this.value + ''; 
       return str.replace('$-', '-$'); 
      } 
     }, 
    }, 
    legend: { 
     enabled: false 
    }, 
    plotOptions: { 
     column: { 
      cursor: 'pointer', 
      stacking: 'normal', 
      point: { 
       events: { 
        click: function() { 
         var drilldown = this.drilldown; 
         if (drilldown) { // drill down; 
          setChart(drilldown); 
         } 
        } 
       } 
      } 
     } 
    }, 
    tooltip: { 
     formatter: function() { 
      var point = this.point, 
       s = '<b>$' + this.y +'</b>'; 
       s = s.replace('$-', '-$'); 
      if (point.drilldown) { 
       s += ': Click to view '+ point.category +''; 
      } 
      return s; 
     } 
    }, 
    series: [{ 
     name: name, 
     data: data 
    }] 
}); 
chart.toolbar.add('RESET', 'Reset', 'chartReset', resetChart); 
}); 
+0

我創建了一個[的jsfiddle](http://jsfiddle.net/

(在setChartresetChart)替換的每個的兩個實例bK3ar /),但實際上並沒有在圖表中看到任何系列。另外,如果你檢查'chart.series'的長度,它看起來只有1個。也許你可以創建一個jsFiddle來更清楚地說明問題? –

+0

您可能必須先進行深入挖掘,然後單擊重置。從第一個系列重置它只會重新加載第一個系列。 對不起,我感到困惑 – FallingReign

回答

9

固定

而是採用每個I同時使用。 當除去系列將其從陣列中除去它,以使陣列中越來越小

每次刪除()被調用。

$.each(chart.series.reverse(), function(i) { 
    chart.series[i].remove(); 
}); 

隨着:

while(chart.series.length > 0) 
chart.series[0].remove();