2013-08-25 51 views
2

我試圖讓我的谷歌圖表顯示一旦他們點擊一個標籤鏈接,但谷歌圖表不顯示。爲什麼谷歌圖表函數在函數內不被調用?

我在ChartlyDaily裏面加入了google圖表代碼。當它在ChartDaily功能之外時,它可以工作,但在其內部則不行。

 <script type="text/javascript" src="https://www.google.com/jsapi"></script> 
       <script type="text/javascript"> 
       google.load("visualization", "1", {packages:["corechart"]}); 
       function ChartDaily(){ 
        google.setOnLoadCallback(drawChartDaily); 
        function drawChartDaily() { 
        var chart_data = ['3',7]; 
        alert(chart_data); 
        var data = google.visualization.arrayToDataTable([ 
        ['Scoring Activity', 'Points given'], chart_data]); 

        var options = { 
        title: 'Semis overall scoring activity' 
        }; 

        var chart = new google.visualization.PieChart(document.getElementById('chart_div')); 
        chart.draw(data, options); 
       } 
       } 
       jQuery(document).ready(function() { 
       $('#tabs > div').hide(); 
       $('#tabs div:first').fadeIn('slow'); 
       $('#tabs ul li:first').addClass('active'); 
       $('#tabs ul li a').click(function(){ 
        $('#tabs ul li.active').removeClass('active'); // <== Only what you need 
        $(this).parent().addClass('active'); 
        var selectedTab=$(this).attr('href'); 
        $('#tabs > div').fadeOut('slow', function() {  // <== Use a callback 
         $(selectedTab).delay(10).fadeIn('fast');   // <== add a delay 
         });   
        return false; 
        }); 
       $('#menu_tab1').click(function(){ 
        ChartDaily(); // supposed to show the chart 
       }); 

       $('#menu_tab2').click(function(){ 
       alert('tab-2 got clicked!!'); 

       }); 

       $('#menu_tab3').click(function(){ 
       alert('tab-3 got clicked!!'); 

       }); 

       $('#menu_tab4').click(function(){ 
       alert('tab-4 got clicked!!'); 

       }); 

       }); 

</script> 

    <div id="chart_div" style=" margin-left:-280px;width: 800px; height: 500px;"></div> 

回答

0

這裏有一些重新開始。

function GoogleChart() { 
    this.chart_data = ['3',7]; 
    this.data_table = google.visualization.arrayToDataTable([['Scoring Activity', 'Points given'], chart_data]); 
    this.options = { 
     title: 'Semis overall scoring activity' 
    }; 

    this.chart = new google.visualization.PieChart(document.getElementById('chart_div'));  
} 

GoogleChart.prototype.drawChartDaily = function() { 
    this.chart.draw(this.data_table, this.options); 
}; 

$(function() { 
    function myOnLoadCallback() { 
     var googleChart = new GoogleChart(); 

     $('#menu_tab1').click(function(){ 
      googleChart.drawChartDaily(); 
     }); 
    } 

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

編輯:更改爲未經測試的示例。

+0

後什麼功能?因爲我需要繪製ChartDaily函數,其中包含當點擊標籤時的drawchartDaily函數 –

+0

對不起,我誤導了你一下。我看到的另一個問題必須糾正的是,google.setOnLoadCallback(drawChartDaily);應該只能調用一次。 要回答你的評論問題,我也是指drawChartDaily函數。 – walleboom

+0

然後我的錯誤在哪裏..我怎樣才能打電話打印圖表點擊功能 –

0

Google加載程序有問題從其他函數中調用,所以最好讓它自己運行。嘗試這樣的:

function ChartDaily() { 
    var chart_data = ['3',7]; 
    var data = google.visualization.arrayToDataTable([ 
     ['Scoring Activity', 'Points given'], 
     chart_data 
    ]); 

    var options = { 
     title: 'Semis overall scoring activity' 
    }; 

    var chart = new oogle.visualization.PieChart(document.getElementById('chart_div')); 
    chart.draw(data, options); 
} 
function init() { 
    $('#menu_tab1').click(function(){ 
     ChartDaily(); 
    }); 
} 
google.load("visualization", "1", {packages:["corechart"], callback: init}); 
+0

如果我們是異步加載圖表腳本,我們應該如何加載谷歌圖表?我們需要在腳本完成加載後調用google.load。但出於某種原因,如果圖表內部有一個命名函數,圖表將不起作用? – TetraDev

+0

我對這個主題的瞭解已經過時了幾年,但是當我上次使用Visualization API時,從函數內部調用時,加載程序無法正常工作。我無法弄清楚爲什麼會出現這種情況。不過,加載程序問題現在完全可以修復。如果他們不是,我建議用你想要完成的事情的例子來開啓你自己的問題。 – asgallant

+0

這個問題還沒有解決,我已經隔離它知道它不能在一個命名的函數中工作,但是在一個具有setTimeout的匿名函數中,比如'setTimeout(function(){google.charts.load ... etc },0)',它確實有效,這不是很有用。不過謝謝 – TetraDev

相關問題