2014-04-01 73 views
0

我試圖創建一個函數來更改Google圖表散點圖中的數據,但是當我調用該函數時圖表不會更改。繼承人代碼:Javascript谷歌圖表更改數據

<script type="text/javascript"> 

var years = [2001, 2002, 2003, 2004, 2005]; 
var sales = [1, 2, 3, 4, 5]; 

google.load("visualization", "1", {packages:["corechart"]}); 

google.setOnLoadCallback(drawChart); 

    var data; 
    var options; 
    var chart; 

    function drawChart() { 
     data = new google.visualization.DataTable(); 
    data.addColumn('number', 'years'); 
    data.addColumn('number', 'sales'); 

    for(i = 0; i < years.length; i++) 
    data.addRow([years[i], sales[i]]); 

     options = { 
      title: 'Age vs. Weight comparison', 
      hAxis: {title: 'Age', minValue: 0, maxValue: 1}, 
      vAxis: {title: 'Weight', minValue: 0, maxValue: 1}, 
      legend: 'none' 
     }; 

     chart = new google.visualization.ScatterChart(document.getElementById('chart_div')); 

     chart.draw(data, options); 
     } 

    $(document).ready(function(){ 
     changeData(); 
    }); 

    function changeData() 
    { 
     data.addRow(10, 10); 
     chart.draw(data, options); 
    } 
</script> 

回答

2

代碼中存在一些錯誤。

第一招:您呼叫負載google.setOnLoadCallback(drawChart);changeData();似乎changeData()首次啓動,因爲有錯誤報告:

Uncaught TypeError: Cannot call method 'addRow' of undefined 

一個選項來修復它是在結束調用changeData();drawChart()功能。

下一個:呼籲

data.addRow(10, 10); 

要改變的東西,如:

data.addRow([2006, 10]); 

因爲addRow()預計的數組。

最小值和最大值必須改變。

請參閱example at jsbin

+0

謝謝,任何想法如何我可以在初始setOnLoadCallback被調用後的某個點自動調用此函數?我試着將它設置爲body的onload函數,但它沒有奏效。 – Lukesmith

+1

一個選項是使用'setTimeout()',它會在一段時間後調用'changeData()'。 500毫秒可能就足夠了。 –

+0

另一種選擇是重新排列代碼並將其大部分移到主體部分。查看更新[在jsbin上的示例](http://jsbin.com/xisoz/2/edit)。 –