2011-11-06 128 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();